diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f2fc4e43..243101d7 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -254,24 +254,6 @@ updates: - package-ecosystem: "npm" directory: "/examples/react-grid-live-data" - schedule: - interval: "daily" - groups: - kendo-dependencies: - patterns: - - '@progress/kendo-*' - allow: - - dependency-name: '@progress/kendo-*' - commit-message: - prefix: "chore:" - reviewers: - - "telerik/kendo-react-devs" - - "telerik/kendo-react-support" - labels: - - "Dependencies" - - - package-ecosystem: "npm" - directory: "/docs" schedule: interval: "daily" groups: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 661e3411..4c6f412f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,8 +63,6 @@ jobs: - 'examples/react-coffee-warehouse/**' react-grid-live-data: - 'examples/react-grid-live-data/**' - knowledge-base: - - 'docs/knowledge-base/examples/**' - name: Build Coffee warehouse nextjs app working-directory: ./examples/coffee-warehouse-nextjs @@ -191,13 +189,6 @@ jobs: - name: Build React Grid Live Data app working-directory: ./examples/react-grid-live-data if: steps.changes.outputs.react-grid-live-data == 'true' - run: | - npm ci - npm run build - - - name: Build Knowledge Base Vite app - working-directory: ./docs/knowledge-base - if: steps.changes.outputs.knowledge-base == 'true' run: | npm ci npm run build \ No newline at end of file diff --git a/docs/.eslintrc.cjs b/docs/.eslintrc.cjs deleted file mode 100644 index 3e212e1d..00000000 --- a/docs/.eslintrc.cjs +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:react/jsx-runtime', - 'plugin:react-hooks/recommended', - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, - settings: { react: { version: '18.2' } }, - plugins: ['react-refresh'], - rules: { - 'react/jsx-no-target-blank': 'off', - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, -} diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index a547bf36..00000000 --- a/docs/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/docs/_app.tsx b/docs/_app.tsx deleted file mode 100644 index 8fbe20fb..00000000 --- a/docs/_app.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { - TreeList, TreeListCellProps, TreeListColumnProps, TreeListExpandChangeEvent, - TreeListToolbar, - extendDataItem, mapTree, mapTreeItem -} from '@progress/kendo-react-treelist'; -import React from 'react'; -import { useMemo, useState } from 'react'; -import { RouteObject } from 'react-router-dom'; - -interface RootProps { - routes: RouteObject[]; -} - -interface Entry { - id: any; - name: string; - items?: Entry[]; - route?: RouteObject; -} - -function createTree(routes: RouteObject[]) { - const tree: any = { name: "", items: [] }; - let id = 0; - for (const route of routes) { - let currentNode = tree; - const routeNodes = route.path?.split('/') || []; - for (const node of routeNodes) { - const idx = currentNode.items.findIndex((item: any) => item.name === node); - if (idx === -1) { - const item: Entry = { id: id++, name: node, items: [] }; - currentNode.items.push(item); - currentNode = item; - } else { - currentNode = currentNode.items[idx]; - }; - } - currentNode.route = route; - - } - - return tree.items; -} - -const subItemsField = 'items'; -const expandField = 'expanded'; -const MIN_AUTOEXPAND_FILTER_LENGTH = 3; - -export default function Index({ routes }: RootProps) { - const initialTreeData = useMemo(() => createTree(routes), [routes]); - const [treeData, setTreeData] = useState(initialTreeData); - - const [filter, setFilter] = useState(''); - const allItemKeys = useMemo(() => Array.from(Array(routes.length).keys()), [routes]); - const [expandedItems, setExpandedItems] = useState([] as number[]); - - const columns: TreeListColumnProps[] = [{ - expandable: true, - title: 'Path', - field: 'name', - width: '30%' - }, { - title: 'Example', - cell: (props: TreeListCellProps) => ( - - {props.dataItem.route ? - {props.dataItem.route.path} : - null - } - - ) - }]; - - const onExpandChange = (e: TreeListExpandChangeEvent) => { - const expanded = !e.value; - const nextTreeData = [...treeData]; - - mapTreeItem(nextTreeData, e.level, subItemsField, item => - extendDataItem(item, subItemsField, { [expandField]: expanded }) - ); - - const nextExpandedItems = e.value ? - expandedItems.filter(id => id !== (e.dataItem as Entry).id) : - [...expandedItems, e.dataItem.id]; - - setTreeData(nextTreeData); - setExpandedItems(nextExpandedItems); - }; - - const onFilter = (e: any) => { - const value = (e.target as HTMLInputElement).value; - setFilter(value); - applyFilter(value); - }; - - const applyFilter = (value) => { - if (!value) { - setTreeData(initialTreeData); - setExpandedItems([]); - return; - } - - const autoExpand = value.length > MIN_AUTOEXPAND_FILTER_LENGTH; - setExpandedItems(autoExpand ? allItemKeys : []); - - try { - const regexp = new RegExp(value); - setTreeData(createTree(routes.filter(({ path }) => path?.match(regexp)))); - } catch (e) { - /* noop */ - } - }; - - const callback = item => expandedItems.includes(item.id) ? - extendDataItem(item, subItemsField, { [expandField]: true }) : item; - - return ( -
- - - - } - /> -
- ); -} diff --git a/docs/_error.tsx b/docs/_error.tsx deleted file mode 100644 index 2906e087..00000000 --- a/docs/_error.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { useRouteError } from 'react-router-dom'; - -export default function ErrorPage() { - const error = useRouteError() as { statusText: string; message: string }; - console.error(error); - - return ( -
-

Error

-

- {error.statusText || error.message} -

-
- ); -} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index f2adb18f..00000000 --- a/docs/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Vite + React - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/knowledge-base/add-custom-event-to-the-editor.md b/docs/knowledge-base/add-custom-event-to-the-editor.md deleted file mode 100644 index cf195484..00000000 --- a/docs/knowledge-base/add-custom-event-to-the-editor.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Add Custom Events to the Editor -description: An example on how to add a custom event to the KendoReact Editor. -type: how-to -page_title: Add Custom Events to the Editor - KendoReact Editor -slug: add-custom-event-to-the-editor -position: -tags: editor, event -ticketid: 1416867 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version3.0.0
ProductProgress® KendoReact
- - -## Description -How to attach a DOM event like onBlur or onColumnMenu to the EditorView. - -## Solution -The desired DOM events can be attached to the EditorView object using the [onMount]({% slug api_editor_editorprops %}#toc-onmount) event of the Editor. - -This is an example showcasing how to attach the onColumnMenu, onBlur and onClick events: - -{% meta height:340 %} -{% embed_file editor/attach-events/app.jsx preview %} -{% embed_file editor/attach-events/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/add-custom-tools-to-the-editor-and-customize-built-in-tools.md b/docs/knowledge-base/add-custom-tools-to-the-editor-and-customize-built-in-tools.md deleted file mode 100644 index 5ad307d6..00000000 --- a/docs/knowledge-base/add-custom-tools-to-the-editor-and-customize-built-in-tools.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Add Custom Tools to the Editor and Customize Built-in Tools -description: Examples on how to add a custom tool to the KendoReact Editor and customize built-in ones. -type: how-to -page_title: Add Custom Tools to the Editor and Customize Built-in Tools - KendoReact Editor -slug: add-custom-tools-to-the-editor-and-customize-built-in-tools -position: -tags: editor, tools, custom tools, customization tools -ticketid: 1416868 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version3.0.0
ProductProgress® KendoReact
- -# Customization - -The following article contains examples for different customizations of the KendoReact Editor. It includes creating different custom tools and customizing existing ones. - -## Insert Span With a ClassName - -How to make a tool that will insert a span element with a specific class and content. - -### Solution - -We need to create a tool, that will insert text content and add the built-in style [mark](https://prosemirror.net/docs/ref/#model.Mark) to it. The class attribute will be added when the mark object is created. - -This is an example showcasing how to achieve this: - -{% meta height:420 %} -{% embed_file editor/add-span-with-class/app.jsx preview %} -{% embed_file editor/add-span-with-class/main.jsx %} -{% endmeta %} - -## Insert Non Editable Node - -How to insert non editable predefined node in the Editor? - -### Solution - -This can be achieved by creating a tool that will insert a non editable [Node](https://prosemirror.net/docs/ref/#model.Node). This Node will function as a single element and will be removed with a single key press. - -{% meta height:420 %} -{% embed_file editor/add-non-editable-element/app.jsx preview %} -{% embed_file editor/add-non-editable-element/main.jsx %} -{% embed_file editor/add-non-editable-element/InsertShortcodeTool.jsx %} -{% endmeta %} - -## Apply Custom FontSize - -How to make a tool that will apply custom font size to the selected content. - -### Solution - -This can be achieved with a custom [DropDownList tool]({% slug api_editor_EditorTools_createstyledropdownlist %}) that will apply the custom font-size based on array of font-size values. - -{% meta height:420 %} -{% embed_file editor/custom-font-size-tool/app.jsx preview %} -{% embed_file editor/custom-font-size-tool/main.jsx %} -{% embed_file editor/custom-font-size-tool/customFontSize.jsx %} -{% endmeta %} - -## Background Color Tool - -How to create a tool that sets a background color? - -## Font Color Tool - -How to create a tool that sets a color? - -## Clear Format Tool - -How to create a tool that clears the inline formatting? - -### Solution - -This example show how to add the background color, font color and clear format tools: - -{% meta height:420 %} -{% embed_file editor/custom-tools/app.jsx preview %} -{% embed_file editor/custom-tools/main.jsx %} -{% embed_file editor/custom-tools/backgroundColorTool.jsx %} -{% embed_file editor/custom-tools/clearAll.jsx %} -{% embed_file editor/custom-tools/myColorTool.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/auto-imports.js b/docs/knowledge-base/auto-imports.js deleted file mode 100644 index 277079d2..00000000 --- a/docs/knowledge-base/auto-imports.js +++ /dev/null @@ -1,94 +0,0 @@ -window.moduleDirectives = (window.moduleDirectives || []).concat( - [ - { - module: '@progress/kendo-react-buttons', - main: 'dist/cdn/js/kendo-react-buttons.js' - }, { - module: '@progress/kendo-react-charts', - main: 'dist/cdn/js/kendo-react-charts.js' - }, { - module: '@progress/kendo-react-grid', - main: 'dist/cdn/js/kendo-react-grid.js' - }, { - module: '@progress/kendo-react-intl', - main: 'dist/cdn/js/kendo-react-intl.js' - }, { - module: '@progress/kendo-react-dateinputs', - main: 'dist/cdn/js/kendo-react-dateinputs.js' - }, { - module: '@progress/kendo-react-animation', - main: 'dist/cdn/js/kendo-react-animation.js' - }, { - module: '@progress/kendo-data-query', - main: 'dist/cdn/js/kendo-data-query.js' - }, { - module: '@progress/kendo-react-popup', - main: 'dist/cdn/js/kendo-react-popup.js' - }, { - module: '@progress/kendo-react-inputs', - main: 'dist/cdn/js/kendo-react-inputs.js' - }, { - module: '@progress/kendo-react-dropdowns', - main: 'dist/cdn/js/kendo-react-dropdowns.js' - }, { - module: '@progress/kendo-react-pdf', - main: 'dist/cdn/js/kendo-react-pdf.js' - }, { - module: '@progress/kendo-react-excel-export', - main: 'dist/cdn/js/kendo-react-excel-export.js' - }, { - module: '@progress/kendo-drawing', - main: 'dist/cdn/js/kendo-drawing.js' - }, { - module: '@progress/kendo-react-dialogs', - main: 'dist/cdn/js/kendo-react-dialogs.js' - }, { - module: '@progress/kendo-react-layout', - main: 'dist/cdn/js/kendo-react-layout.js' - }, { - module: '@progress/kendo-react-editor', - main: 'dist/cdn/js/kendo-react-editor.js' - }, { - module: '@progress/kendo-react-notification', - main: 'dist/cdn/js/kendo-react-notification.js' - }, { - module: '@progress/kendo-react-sortable', - main: 'dist/cdn/js/kendo-react-sortable.js' - }, { - module: '@progress/kendo-react-tooltip', - main: 'dist/cdn/js/kendo-react-tooltip.js' - }, { - module: '@progress/kendo-react-treeview', - main: 'dist/cdn/js/kendo-react-treeview.js' - }, { - module: '@progress/kendo-react-upload', - main: 'dist/cdn/js/kendo-react-upload.js' - },{ - module: '@progress/kendo-react-data-tools', - main: 'dist/cdn/js/kendo-react-data-tools.js' - }, - { - module: '@progress/kendo-react-scheduler', - main: 'dist/cdn/js/kendo-react-scheduler.js' - }, - { - module: '@progress/kendo-react-form', - main: 'dist/cdn/js/kendo-react-form.js' - }, { - module: '@progress/kendo-date-math', - main: 'dist/cdn/main.js', - }, { - module: '@progress/kendo-drawing', - main: 'dist/cdn/main.js', - }, - { - module: '@progress/kendo-intl', - main: 'dist/cdn/main.js', - }, - { - module: 'ical.js', - main: 'build/ical.js', - } - - ] -); \ No newline at end of file diff --git a/docs/knowledge-base/bottomnavigation-change-content.md b/docs/knowledge-base/bottomnavigation-change-content.md deleted file mode 100644 index 181d1f37..00000000 --- a/docs/knowledge-base/bottomnavigation-change-content.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Changing content on BottomNavigation selection -description: An example on how to change content on BottomNavigation selection -type: how-to -page_title: Changing content when BottomNavigation selection changes - KendoReact BottomNavigation -slug: bottomnavigation-change-content -tags: bottomnavigation, layout, kendoreact -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version5.12.0
ProductProgress® KendoReact
- -## Description -I want to change the main content when the BottomNavigation selection changes - -## Solution -For achieving the desired result the onSelect event of the BottomNavigation can be used for determining which item was selected. Based on that selection the main rendered content (component) can be changed - -{% meta id height:360 %} -{% embed_file layout/bottomnavigation-change-content/app.jsx preview %} -{% embed_file layout/bottomnavigation-change-content/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/chart-color-by-category.md b/docs/knowledge-base/chart-color-by-category.md deleted file mode 100644 index 925a702c..00000000 --- a/docs/knowledge-base/chart-color-by-category.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Set different colors in Chart for ChartSeriesItem based on category value -description: An example on how to set different colors per category for the ChartSeriesItem -type: how-to -page_title: Setting different colors per category for ChartSeriesItem - KendoReact Chart -slug: chart-color-by-category -tags: chart, chartseriesitem, customization, color -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.12.0
ProductProgress® KendoReact
- - -## Description -I want to have different colors per category value for the ChartSeriesItem - - -## Solution -The color property of the ChartSeriesItem accepts function where the dataItem is accessible. Using the category value we can create a random color per each category (or use predefined colors) and store it in an array or an object, so it can be re-used for other items with the same category. - -This is an example showcasing how to limit the value: - -{% meta id:index height:760 %} -{% embed_file charts/chart-color-by-category/app.jsx preview %} -{% embed_file charts/chart-color-by-category/main.jsx %} -{% embed_file charts/chart-color-by-category/bubble-data.json %} -{% endmeta %} diff --git a/docs/knowledge-base/chart-heatmap-custom-series-item.md b/docs/knowledge-base/chart-heatmap-custom-series-item.md deleted file mode 100644 index ba267508..00000000 --- a/docs/knowledge-base/chart-heatmap-custom-series-item.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Set custom rendering for the Heatmap ChartSeriesItem -description: An example on how to set custom rendering for the ChartSeriesItem in Heatmap -type: how-to -page_title: Setting Different ChartSeriesItem Visual in Heatmap - KendoReact Chart -slug: chart-heatmap-custom-series-item -tags: chart, chartseriesitem, customization, visual -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.14.1
ProductProgress® KendoReact
- - -## Description -I want to add border radius in Heatmap series items (ChartSeriesItem) - - -## Solution -Set custom visual for ChartSeriesItem and draw custom shape with border radius. - -This is an example demonstrating the above approach: - -{% meta id height:660 %} -{% embed_file charts/heatmap-custom-series-item/app.jsx preview %} -{% embed_file charts/heatmap-custom-series-item/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/chart-limiting-axis-labels-count.md b/docs/knowledge-base/chart-limiting-axis-labels-count.md deleted file mode 100644 index 27b786b4..00000000 --- a/docs/knowledge-base/chart-limiting-axis-labels-count.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Limit the number of axis labels in the KendoReact Chart -description: An example on how to limit the number of axis labels in the Chart so they don't overlap -type: how-to -page_title: Setting the axis labels step to make the labels readable - KendoReact Chart -slug: chart-limiting-axis-labels-count -tags: chart, chartcategoryaxisitem, labels -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.12.0
ProductProgress® KendoReact
- - -## Description -I have a Chart with many points and rendering the axis labels for each point makes them unreadable. Can I limit the number of labels and render every n-th label? - - -## Solution -Limiting the number of the axis labels can be achieved by setting the "ChartCategoryAxisItem.labels.step" property. For example, setting the "step" property to "10" will render every 10th label. - -Here is an example with the described approach: - -{% meta id height:340 %} -{% embed_file charts/limiting-axis-labels-count/app.jsx preview %} -{% embed_file charts/limiting-axis-labels-count/main.jsx %} -{% endmeta %} - diff --git a/docs/knowledge-base/chart-rounded-bar-corners.md b/docs/knowledge-base/chart-rounded-bar-corners.md deleted file mode 100644 index f59381f7..00000000 --- a/docs/knowledge-base/chart-rounded-bar-corners.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Add rounded corners for the Bar Chart -description: An example on how to add custom rendering for rounded corners of the Bar series in the Chart -type: how-to -page_title: Rendering rounded corners for the Bar series - KendoReact Chart -slug: chart-rounded-bar-corners -tags: chart, bar, customization -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.12.0
ProductProgress® KendoReact
- - -## Description -I want to add rounded corners for the Bar series in the Chart component - - -## Solution -Changing the rendering of the Chart elements can be achieved by defining custom visual. - -This is an example showcasing how to limit the value: - -{% meta id height:540 %} -{% embed_file charts/chart-rounded-bar-corners/app.jsx preview %} -{% embed_file charts/chart-rounded-bar-corners/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/chart-set-multiple-x-axes.md b/docs/knowledge-base/chart-set-multiple-x-axes.md deleted file mode 100644 index 6e3bb75d..00000000 --- a/docs/knowledge-base/chart-set-multiple-x-axes.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Set Multiple X-Axes for a Chart -description: An example on how to set multiple x-axes for a KendoReact Chart. -type: how-to -page_title: Set Multiple X-Axes for a Chart - KendoReact Chart -slug: chart-set-multiple-x-axes -tags: chat, axes, multiple axes, x-axis -ticketid: 1559361 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version5.1.0
ProductProgress® KendoReact
- - -## Description - -How can I set multiple x-axes for a chart? - -## Solution - -Use the [axisCrossingValue](https://www.telerik.com/kendo-react-ui/components/charts/api/ChartCategoryAxisItemProps/#toc-axiscrossingvalue) in order to pass the values for the overlapping axes: - -{% meta id:index height:600 %} -{% embed_file charts/set-multiple-x-axes/app.jsx preview %} -{% embed_file charts/set-multiple-x-axes/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/chart-set-plotbands-on-plot-click.md b/docs/knowledge-base/chart-set-plotbands-on-plot-click.md deleted file mode 100644 index e8b1020b..00000000 --- a/docs/knowledge-base/chart-set-plotbands-on-plot-click.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Set PlotBands on a Plot-Area Click of a Chart -description: An example of how to set PlotBands when clicking on the Plot Area of a KendoReact Chart. -type: how-to -page_title: Set PlotBands on Plot-Area Clicks of a Chart - KendoReact Charts -slug: chart-set-plotbands-on-plot-click -tags: grid, kendoreact, plotbands, charts, chart, plotarea, click -ticketid: 1521237 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version4.6.0
ProductProgress® KendoReact
- - -## Description - -How to set PlotBands when clicking on the Plot Area of a KendoReact Chart? - -## Solution - -This can be achieved by using the [`onPlotAreaClick`]({% slug api_charts_chartprops %}#toc-onplotareaclick) property whose event handler will trigger every time the user clicks on the Plot Area. - -It will be used to get the crosshair values and set the values of the plotBands to be those of the crosshair. - -Optional: In order to avoid the Chart to play animations each time the PlotBands are updated, the [`transitions`]({% slug api_charts_chartprops %}#toc-transitions) property of the Chart should be set to false. - - - -{% meta id height:520 %} -{% embed_file charts/set-plotbands-on-plot-area-click/app.jsx preview %} -{% embed_file charts/set-plotbands-on-plot-area-click/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/chat-croll-to-bottom.md b/docs/knowledge-base/chat-croll-to-bottom.md deleted file mode 100644 index 2a1b8ccd..00000000 --- a/docs/knowledge-base/chat-croll-to-bottom.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Scroll KendoReact Chat to the bottom automatically -description: An example on how to make the Chat scroll to the bottom automatically -type: how-to -page_title: Scroll to the bottom of each message automatically - KendoReact Conversational UI -slug: conversational-ui-scroll-to-bottom-automatically -tags: conversational-ui, chat, scroll, scroll to bottom, automatically, scroll automatically -ticketid: 1615928 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version6.1.0
ProductProgress® KendoReact
- -## Description - -When the user sends the first message, the Conversational UI scrolls to the bottom automatically, however in the next messages it does not. - -## Solution - -This can be achieved by adjusting the scrollTop of the `.k-message-list` container on the [onMessageSend](https://www.telerik.com/kendo-react-ui/components/conversationalui/api/ChatProps/#toc-onmessagesend) event: - -{% meta id:index height:900 %} -{% embed_file conversational-ui/chat-scroll-to-bottom/app.jsx preview %} -{% embed_file conversational-ui/chat-scroll-to-bottom/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/chat-maxlength-char-count.md b/docs/knowledge-base/chat-maxlength-char-count.md deleted file mode 100644 index af08e955..00000000 --- a/docs/knowledge-base/chat-maxlength-char-count.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Show maxLength and number of typed characters in the KendoReact Chat -description: An example on how to make the Chat show number of typed characters and maxLength of input -type: how-to -page_title: Show maxLength and number of typed characters- KendoReact Chat -slug: chat-maxlength-char-count -tags: chat, maxlength, count chars, count -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version7.3.0
ProductProgress® KendoReact
- -## Description - -How to show the number of characters as the user types and set a maxLength for the Chat component? - -## Solution - -To set a `maxLength` render a custom [`Input`]({% slug overview_textbox %}) component and set the value for the [`maxLength`]({% slug api_inputs_input %}#toc-maxLength) prop to the preferred value. To see the character count as the user types, display the [`value`]({% slug api_inputs_input %}#toc-value) variable in the custom component markup. For more information on how to customize the Chat component refer to the [`customization`]({% slug custom-rendering_chat %}) - -{% meta id:index height:900 %} -{% embed_file conversational-ui/chat-maxlength-char-count/app.tsx preview %} -{% embed_file conversational-ui/chat-maxlength-char-count/main.tsx %} -{% endmeta %} diff --git a/docs/knowledge-base/combobox-open-on-focus-and-tab.md b/docs/knowledge-base/combobox-open-on-focus-and-tab.md deleted file mode 100644 index 49689e8d..00000000 --- a/docs/knowledge-base/combobox-open-on-focus-and-tab.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Open KendoReact ComboBox popup on click or tab -description: An example on how to open the popup of the ComboBox on click and tab -type: how-to -page_title: Open The Popup On Click Or Tab - KendoReact ComboBox -slug: combobox-open-on-focus-and-tab -tags: combobox, popup, open, focus, tab -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.14.1
ProductProgress® KendoReact
- - -## Description -I want the popup of the ComboBox to open on click or when tabbing to it. - - -## Solution -Handle the onFocus event of the ComboBox and within a setTimeout function check the opened state and if the popup is not opened, call the "toggleBtnClick" method. - -Here is an example demonstrating this approach: - -{% meta id height:560 %} -{% embed_file dropdowns/combobox-open-on-focus-and-tab/app.jsx preview %} -{% embed_file dropdowns/combobox-open-on-focus-and-tab/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/combobox-open-popup-initially.md b/docs/knowledge-base/combobox-open-popup-initially.md deleted file mode 100644 index bc8cdd27..00000000 --- a/docs/knowledge-base/combobox-open-popup-initially.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Open KendoReact ComboBox popup initially on load -description: An example on how to manually open the popup of the ComboBox on load -type: how-to -page_title: Opening the popup after the initialization of the component - KendoReact ComboBox -slug: combobox-open-popup-initially -tags: combobox, popup, open -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.13.1
ProductProgress® KendoReact
- - -## Description -I want the popup of the ComboBox to open when the component is initialized - - -## Solution -For manually opening the popup of the ComboBox after the initialization we can use its "ref" within React.useEffect and use "toggleBtnClick" to simulate a click and trigger the opening. - -Here is an example demonstrating this approach: - -{% meta id height:480 %} -{% embed_file dropdowns/combobox-open-popup-initially/app.jsx preview %} -{% embed_file dropdowns/combobox-open-popup-initially/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/custom-colors-in-chart-series.md b/docs/knowledge-base/custom-colors-in-chart-series.md deleted file mode 100644 index 326dea61..00000000 --- a/docs/knowledge-base/custom-colors-in-chart-series.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Set Custom Colors in Chart Series -description: An example on how to set custom colors in the KendoReact Chart series. -type: how-to -page_title: Set Custom Colors in Chart Series - KendoReact Chart -slug: custom-colors-in-chart-series -tags: chart, kendoreact, dates, format -ticketid: 1410298 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
ProductProgress® KendoReact
- - -## Description - -How can I use the API for implementations such as using assigned customized colors for the series plot of a Donut Chart? - -## Solution - -Use the [`color`]({% slug api_charts_chartseriesitemprops %}#toc-color) or the [`colorField`]({% slug api_charts_chartseriesitemprops %}#toc-colorfield) props of the `ChartSeriesItem`. - -{% meta id height:500 %} -{% embed_file charts/set-colors/app.jsx preview %} -{% embed_file charts/set-colors/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/custom-expand-collapse-column.md b/docs/knowledge-base/custom-expand-collapse-column.md deleted file mode 100644 index de766aa8..00000000 --- a/docs/knowledge-base/custom-expand-collapse-column.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Implement Custom Expand/Collapse Columns -description: An example on how to create a custom expand/collapse column in the KendoReact Grid. -type: how-to -page_title: Change or Hide Columns by Implementing an Expand/Collapse Column - KendoReact Grid -slug: howto_custom_expand_collapse_column -tags: expand, collapse, column, kendoreact, grid -ticketid: 1410508 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
ProductProgress® KendoReact
- - -## Description - -How can I have control over the expand/collapse column of the KendoReact Grid and be able to change or hide the Grid columns? - -## Solution - -To modify the expand/collapse column of the Grid: - -1. Remove the onExpandChange event handler from the Grid -1. Create a custom column that is bound to a custom expand field (different from the expandField set to the Grid). -1. Show the icons conditionally within the custom cell. -1. On click of the icons, trigger the onChange from the cell props, which will trigger the onItemChange event of the Grid -1. Within the onItemChange of the Grid, when the field is the custom expand field, change the expanded field state - - -Following is an example demonstrating this approach: - -{% meta id height:540 %} -{% embed_file grid/custom-expand-collapse-column/app.jsx preview %} -{% embed_file grid/custom-expand-collapse-column/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/daterangepicker-error-message-invalid-date.md b/docs/knowledge-base/daterangepicker-error-message-invalid-date.md deleted file mode 100644 index 1d77f0e6..00000000 --- a/docs/knowledge-base/daterangepicker-error-message-invalid-date.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: DateRangePicker validate the entered dates of the DateRangePicker -description: An example on how to validate the entered dates in the KendoReact DateRangePicker -type: how-to -page_title: Validate the DateRangePicker date values - KendoReact DateRangePicker -slug: daterangepicker-validation -tags: daterangepicker, validation, daterange -ticketid: 1627626 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version6.0.2
ProductProgress® KendoReact
- - -## Description -I want validate the dates that are added to the DateRangePicker through its input element using either the keyboard or arrow keys. - - -## Solution -You can achieve this by custom rendering the date inputs which allows you to get their values in the `onChange` event handler. The value can be compared to the `min` or `max` date value that is passed through props to check if the entered date is valid or not. When the date is invalid, you can show the [Error](https://www.telerik.com/kendo-react-ui/components/labels/error/) component or [Popup](https://www.telerik.com/kendo-react-ui/components/popup/) component to display an error message: - -Here is an example demonstrating this approach: - -{% meta id height:480 %} -{% embed_file dropdowns/daterangepicker-validation/app.jsx preview %} -{% embed_file dropdowns/daterangepicker-validation/main.jsx %} -{% embed_file dropdowns/daterangepicker-validation/customStartDateInput.jsx %} -{% embed_file dropdowns/daterangepicker-validation/customEndDateInput.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/daterangepicker-predefined-ranges.md b/docs/knowledge-base/daterangepicker-predefined-ranges.md deleted file mode 100644 index b9c9e1ba..00000000 --- a/docs/knowledge-base/daterangepicker-predefined-ranges.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Add buttons with predefined ranges in DateRangePicker's popup -description: An example on how to add custom buttons for setting predefined ranges in the DateRangePicker -type: how-to -page_title: Adding predefined ranges in the popup - KendoReact DateRangePicker -slug: daterangepicker-predefined-ranges -tags: daterangepicker, predefined, ranges, customization -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.12.0
ProductProgress® KendoReact
- - -## Description -I want to add buttons in the DateRangePicker's popup for setting predefined ranges (like today's date, this week, this month, etc.). - - -## Solution -For achieving the desired result a custom Popup must be defined for the DateRangePicker, where the custom buttons can be added. Since the custom Popup of the DateRangePicker provides the default children elements, they can be re-used. - -This is an example showcasing how to limit the value: - -{% meta id:index height:560 %} -{% embed_file dateinputs/daterangepicker-predefined-ranges/app.jsx preview %} -{% embed_file dateinputs/daterangepicker-predefined-ranges/main.jsx %} -{% embed_file dateinputs/daterangepicker-predefined-ranges/styles.css %} -{% endmeta %} diff --git a/docs/knowledge-base/daterangepicker-validate-range.md b/docs/knowledge-base/daterangepicker-validate-range.md deleted file mode 100644 index 9ef09e2e..00000000 --- a/docs/knowledge-base/daterangepicker-validate-range.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Show invalid state for DateRangePicker if start date is after end date -description: An example on how to validate the DateRangePicker based on the start and end dates -type: how-to -page_title: Set Invalid State If Start Date Is After End Date - KendoReact DateRangePicker -slug: daterangepicker-validate-range -tags: daterangepicker, validation, range, invalid -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
Product Version5.14.1
ProductProgress® KendoReact
- - -## Description -I want to set the DateRangePicker to invalid state or show error message if the start date is after the end date. - - -## Solution -Set the "valid" property of the DateRangePicker to a state variable that can be changed to "true" or "false" within the onChange event of the DateRangePicker based on the "start" and "end" values. - -This is an example showcasing the approach: - -{% meta id height:560 %} -{% embed_file dateinputs/daterangepicker-validate-range/app.jsx preview %} -{% embed_file dateinputs/daterangepicker-validate-range/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/datetimepicker-conditional-set-button.md b/docs/knowledge-base/datetimepicker-conditional-set-button.md deleted file mode 100644 index f9c6a459..00000000 --- a/docs/knowledge-base/datetimepicker-conditional-set-button.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: DateTimePicker disable Set button based on the selected date -description: An example on how to disable and enable the Set button based on the chosen date in the KendoReact DateTimePicker. -type: how-to -page_title: Disable Set Button - KendoReact DateTimePicker -slug: datetimepicker-disable-set-button -tags: datetimepicker, set button, datetimepicker disabled -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Versionv7.2.3
ProductProgress® KendoReact
- -## Description - -I want to enhance the DateTimePicker such that the `Set` Button is disabled and the component appears as invalid based on a the selected date. For example, I do not want to allow the user to selected any dates that are after today's date. - -## Solution - -You can achieve this by rendering a custom Calendar component for the DateTimePicker using its `calendar` property. This allows getting the selected date by the user and compare it with a certain condition (ex: if the date is after today's date). - -In order to disable selecting a certain date based on the condition, you can add the `k-disabled` class to the `k-time-accept` DOM element, and remove it when the condition is true. Moreover, set a `valid` state variable to either true or false based on the condition, and pass it to the `valid` property of the DateTimePicker. This is done in order to highlight the component with a red border when the condition is false. - -```jsx -if (date1 <= date2) { - document - .getElementsByClassName("k-time-accept")[0] - .classList.remove("k-disabled"); - setValid(true); -} else { - document - .getElementsByClassName("k-time-accept")[0] - .classList.add("k-disabled"); - setValid(false); -} -``` - -This is an example that demonstrates this approach. - -{% meta id height:560 %} -{% embed_file dateinputs/datetimepicker-conditional-set-button/app.jsx preview %} -{% embed_file dateinputs/datetimepicker-conditional-set-button/main.jsx %} -{% endmeta %} - -For more information on customizing the Calendar of the DateTimePicker, and using its `valid` prop, check the following article respectively: - -- https://www.telerik.com/kendo-react-ui/components/dateinputs/datetimepicker/custom-rendering/#toc-customizing-the-calendar -- https://www.telerik.com/kendo-react-ui/components/dateinputs/datetimepicker/forms/ diff --git a/docs/knowledge-base/drag-and-drop-between-grids.md b/docs/knowledge-base/drag-and-drop-between-grids.md deleted file mode 100644 index d7cf8794..00000000 --- a/docs/knowledge-base/drag-and-drop-between-grids.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Drag and Drop Rows between Grids -description: An example on how to drag and drop rows between two KendoReact Grids. -type: how-to -page_title: Drag and Drop Rows between Grids - KendoReact Grid -slug: drag-and-drop-between-grids -tags: grid, rows, merge -ticketid: 1454285 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version3.0.0
ProductProgress® KendoReact
- - -## Description - -I need to be able to drag and drop rows from one Grid to another. - -## Solution - -Use the [`rowRender`]({% slug api_grid_gridprops %}#toc-rowrender) prop of the Grid to attach the [onDragStart](https://developer.mozilla.org/en-US/docs/Web/API/Document/dragstart_event) and onDrop(https://developer.mozilla.org/en-US/docs/Web/API/Document/drop_event) events to the row. - -{% meta id height:760 %} -{% embed_file grid/drag-drop-between-grids/app.jsx preview %} -{% embed_file grid/drag-drop-between-grids/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/drawer-close-on-click.md b/docs/knowledge-base/drawer-close-on-click.md deleted file mode 100644 index 12df4f54..00000000 --- a/docs/knowledge-base/drawer-close-on-click.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Change the expanded state of the Drawer when clicking outside of it -description: An example on how to hide the Drawer when clicking outside of it -type: how-to -page_title: Setting the expanded state to "false" when clicking outside of the Drawer - KendoReact Drawer -slug: drawer-close-on-click -tags: drawer, layout, kendoreact -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version5.13.0
ProductProgress® KendoReact
- -## Description -I want to hide the Drawer when I click outside of it - -## Solution -To handle the click event, add event listener to the document for the "mousedown" event. Within the event handler check if the clicked target is within the Drawer wrapping container element and if not, change the "expanded" state variable. - -The following example demonstrates this approach: - -{% meta id height:460 %} -{% embed_file layout/drawer-close-on-click/app.jsx preview %} -{% embed_file layout/drawer-close-on-click/main.jsx %} -{% embed_file layout/drawer-close-on-click/styles.css %} -{% endmeta %} diff --git a/docs/knowledge-base/drawer-router-v6.md b/docs/knowledge-base/drawer-router-v6.md deleted file mode 100644 index b9bea944..00000000 --- a/docs/knowledge-base/drawer-router-v6.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Use KendoReact Drawer with react-router-dom version 6 -description: An example on how to use the Drawer with React Router v6.0.1 -type: how-to -page_title: Using the Drawer with react-router-dom version 6.0.1 - KendoReact Drawer -slug: drawer-router-v6 -tags: drawer, layout, kendoreact, router -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version5.13.0
ProductProgress® KendoReact
- -## Description -I want to use KendoReact Drawer with React Router version 6 - -## Solution -The following example demonstrates how to use React Router version 6.0.1 with KendoReact Drawer: - -{% meta id height:760 %} -{% embed_file layout/drawer-router-v6/app.jsx preview %} -{% embed_file layout/drawer-router-v6/main.jsx %} -{% embed_file layout/drawer-router-v6/styles.css %} -{% embed_file layout/drawer-router-v6/About.jsx %} -{% embed_file layout/drawer-router-v6/DrawerContainer.jsx %} -{% embed_file layout/drawer-router-v6/Home.jsx %} -{% embed_file layout/drawer-router-v6/Products.jsx %} -{% embed_file layout/drawer-router-v6/Team.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/dropdownlist-clear-value.md b/docs/knowledge-base/dropdownlist-clear-value.md deleted file mode 100644 index fec5b65c..00000000 --- a/docs/knowledge-base/dropdownlist-clear-value.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Clear value in a DropDownList -description: An example of how to clear the value in a DropDownList -type: how-to -page_title: Clear value in a DropDownList - KendoReact DropDownList -slug: dropdownlist-clear-value -tags: dropdownlist, clear, value -ticketid: 1548198 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version5.13.1
ProductProgress® KendoReact
- - -## Description - -How to clear the value of a DropDownList? - -## Solution - -A custom clear button can be added by inserting children elements and passing them to the [`valueRender`]({% slug api_dropdowns_dropdownlistprops %}#toc-valuerender) prop. - - -{% meta id height:460 %} -{% embed_file dropdownlist/dropdownlist-clear-value/app.tsx preview %} -{% embed_file dropdownlist/dropdownlist-clear-value/main.tsx %} -{% endmeta %} diff --git a/docs/knowledge-base/editor-change-cell-background.md b/docs/knowledge-base/editor-change-cell-background.md deleted file mode 100644 index 8b5dd815..00000000 --- a/docs/knowledge-base/editor-change-cell-background.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Change Background of Editor Cell -description: An example on how to change the background color of a cell inside the Editor -type: how-to -page_title: Change Background of Editor Cell | KendoReact Editor -slug: change-background-color-of-editor-cell -tags: editor, background, cell -ticketid: 1572583 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version5.5.0
ProductProgress® KendoReact
- - -## Description - -How can I change the background color of a cell using the Editor? - -## Solution - -Create a custom tool that changes the background color of the cell: - -![Editor Change Cell Background Color](examples/editor/change-background-color-of-cell/editor-cell-color.gif) - - -{% meta id:index height:460 %} -{% embed_file editor/change-background-color-of-cell/app.tsx preview %} -{% embed_file editor/change-background-color-of-cell/main.tsx %} -{% embed_file editor/change-background-color-of-cell/CellBackColorTool.tsx preview %} -{% embed_file editor/change-background-color-of-cell/content-overview.ts preview %} -{% endmeta %} diff --git a/docs/knowledge-base/editor-double-underilne.md b/docs/knowledge-base/editor-double-underilne.md deleted file mode 100644 index 7cee8468..00000000 --- a/docs/knowledge-base/editor-double-underilne.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Add Double Underline for the Editor content -description: An example on how to double underline the Editor content -type: how-to -page_title: Add Double Underline for the Editor content - KendoReact Editor -slug: editor-double-underilne -tags: editor, kendoreact, double, underline -ticketid: 1645788 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version7.3.0
ProductProgress® KendoReact
- - -## Description - -How can I add a double underline to the Editor content? - -## Solution - -This can be achieved by implementing a custom editor tool which applies [text-decoration](https://www.w3schools.com/cssref/css3_pr_text-decoration-style.php) inline styles to the selected text. For more information on how to use custom tools in the Editor, refer to the [Using Custom Tools](https://www.telerik.com/kendo-react-ui/components/editor/tools/#toc-customizing-built-in-tools) article. - - -{% meta id:index height:900 %} -{% embed_file editor-double-underilne/app.tsx preview %} -{% embed_file editor-double-underilne/main.tsx %} -{% embed_file editor-double-underilne/doubleUnderlineTool.tsx %} -{% endmeta %} diff --git a/docs/knowledge-base/editor-error-on-enter-press.md b/docs/knowledge-base/editor-error-on-enter-press.md deleted file mode 100644 index d1437f8d..00000000 --- a/docs/knowledge-base/editor-error-on-enter-press.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Editor Raises an Error on Enter Press -description: Learn how to troubleshoot when the Kendoreact Editor raises an error on Enter press. -type: how-to -page_title: Editor Raises an Error on Enter Press - KendoReact Editor -slug: editor-error-on-enter-press -tags: editor, kendoreact, error, enter -ticketid: 9999999 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version4.5.0
ProductProgress® KendoReact
- - -## Description - -When I press Enter in the KendoReact Editor this errors occurs `"RangeError: Can not convert <> to a Fragment (looks like multiple versions of prosemirror-model were loaded)".` - -## Solution - -Currently, it happens with the KendoReact Editor examples when opened in the StackBlitz, CodeSandBox or an app where yarn has been used. - -If you open an example in StackBlitz, download it and run it locally, you will see that it works as expected. It also works as expected in the [KendoReact website](https://www.telerik.com/kendo-react-ui/components/editor/paste/). The error happens when different versions of [ProseMirror](https://prosemirror.net/) packages are loaded. - -To prevent this error in your app: - -- If you use yarn, define all the ProseMirror packages versions in the [resolutions](https://classic.yarnpkg.com/en/docs/selective-version-resolutions/) section in your app's package.json file. The correct ProseMirror packages versions are listed in the package.json file of the `@progress/kendo-editor-common` package which a dependency of the editor and located in the editor's node_modules folder (`node_modules\@progress\kendo-editor-common\package.json`). -- If you have customizations and you have installed additionally the `@progress/kendo-editor-common` package, make sure that the installed version is the same as the version listed in the editor's dependencies (`node_modules\@progress\kendo-react-editor\package.json`). - -If you do not need to use the ProseMirror packages to customize or extend the editor's functionality and do not use yarn, you will not get such an error. diff --git a/docs/knowledge-base/editor-multilevel-list-styles.md b/docs/knowledge-base/editor-multilevel-list-styles.md deleted file mode 100644 index 3839d224..00000000 --- a/docs/knowledge-base/editor-multilevel-list-styles.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Add different bullet styles to multilevel lists for the Editor -description: Learn how to add different bullet styles to multilevel lists for the Editor -type: how-to -page_title: Add different bullet styles to multilevel lists - KendoReact Editor -slug: editor-multilevel-list-styles -tags: editor, kendoreact, bullet, multilevel, styles -ticketid: 1649134 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
Product Version7.4.0
ProductProgress® KendoReact
- -## Description - -How can I apply different bullet styles to different indentation levels in the KendoReact Editor? - -## Solution - -You can achieve this by adding a [style element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style) to the iframe document that contains the required [list-style-type](https://www.w3schools.com/cssref/pr_list-style-type.php) - -{% meta id:index height:330 %} -{% embed_file editor/editor-multilevel-list-styles/app.jsx preview %} -{% embed_file editor/editor-multilevel-list-styles/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/editor-proseMirror-mentions.md b/docs/knowledge-base/editor-proseMirror-mentions.md deleted file mode 100644 index db9c9475..00000000 --- a/docs/knowledge-base/editor-proseMirror-mentions.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Integrate ProseMirror Mentions Plugin inside the Editor -description: An example on how to use the ProseMirror Mentions plugin inside the KendoReact Editor. -type: how-to -page_title: Integrate ProseMirror Mentions Plugin inside the Editor - KendoReact Editor -slug: editor-prosemirror-mentions -tags: editor, kendoreact, plugin, prosemirror, mention, hashtag -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
ProductProgress® KendoReact
- - -## Description - -How can I use @mentions and #hashtags inside the KendoReact Editor? - -## Solution - -You can use the [`proseMirror-mentions`](https://github.com/joelewis/prosemirror-mentions) plugin to provide a `@mentions` and `#hashtags` functionality for the KendoReact Editor. - -{% meta id:index height:330 %} -{% embed_file editor/prose-mirror-mentions/app.jsx preview %} -{% embed_file editor/prose-mirror-mentions/main.jsx %} -{% embed_file editor/prose-mirror-mentions/style.css %} -{% endmeta %} diff --git a/docs/knowledge-base/editor-set-default-target-blank.md b/docs/knowledge-base/editor-set-default-target-blank.md deleted file mode 100644 index bf6334f9..00000000 --- a/docs/knowledge-base/editor-set-default-target-blank.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Set Default Target Blank for All Links inside the Editor -description: An example on how to set by default target blank for all links in the KendoReact Editor. -type: how-to -page_title: Set Default Target Blank for All Links inside the Editor - KendoReact Editor -slug: editor-set-default-target-blank -tags: editor, kendoreact, target, blank -ticketid: 1646724 -res_type: kb -category: knowledge-base ---- - - -## Environment - - - - - - - - - - - - -
Product Version7.3.0
ProductProgress® KendoReact
- -## Description - -How to set by default `target='_blank'` for all the urls present in editor? - -## Solution - -This can be achieved by changing the default `target` value in the link mark implementation of the [Editor schema](https://www.telerik.com/kendo-react-ui/components/editor/schema/) and applying the new one: - -{% meta id height:480 %} -{% embed_file editor/editor-set-default-target-blank/app.tsx preview %} -{% embed_file editor/editor-set-default-target-blank/main.tsx %} -{% embed_file editor/editor-set-default-target-blank/content.ts %} -{% embed_file editor/editor-set-default-target-blank/schema-utils.ts %} -{% embed_file editor/editor-set-default-target-blank/schema.ts %} -{% endmeta %} diff --git a/docs/knowledge-base/editor-set-maxwidth.md b/docs/knowledge-base/editor-set-maxwidth.md deleted file mode 100644 index fd86384b..00000000 --- a/docs/knowledge-base/editor-set-maxwidth.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Setting maxwidth for the Editor -description: An example on how to set maxwidth for the Editor -type: how-to -page_title: Set maxwidth for the Editor - KendoReact Editor -slug: editor-set-maxwidth -position: -tags: editor, maxwidth, margins -ticketid: 1624033 -res_type: kb -category: knowledge-base ---- - - -## Environment - - - - - - - - - - - -
Product Version7.0.2
ProductProgress® KendoReact
- - -## Description -I want to set margins/max width inside of the Kendo text editor. - -## Solution - -This can be achieved by adding a `style` element to the iframe content element. - -{% meta id:index height:500 %} -{% embed_file editor/set-maxwidth/app.jsx preview %} -{% embed_file editor/set-maxwidth/main.jsx %} -{% embed_file editor/set-maxwidth/content.js %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/chart-color-by-category/app.jsx b/docs/knowledge-base/examples/charts/chart-color-by-category/app.jsx deleted file mode 100644 index 24f01f9c..00000000 --- a/docs/knowledge-base/examples/charts/chart-color-by-category/app.jsx +++ /dev/null @@ -1,71 +0,0 @@ -import * as React from 'react'; - -import { - Chart, - ChartTooltip, - ChartTitle, - ChartLegend, - ChartSeries, - ChartSeriesItem, - ChartXAxis, - ChartXAxisItem, - ChartYAxis, - ChartYAxisItem, -} from '@progress/kendo-react-charts'; - -import data from './bubble-data.json'; - -import 'hammerjs'; - -const xPlotBands = [ - { - from: -5000, - to: 0, - color: '#00f', - opacity: 0.05, - }, -]; - -let categoryColors = {}; -const randomColor = (props) => { - if (categoryColors[props.dataItem.category]) { - return categoryColors[props.dataItem.category]; - } else { - const randomColor = Math.floor(Math.random() * 16777215).toString(16); - categoryColors[props.dataItem.category] = '#' + randomColor; - return '#' + randomColor; - } -}; - -const ChartContainer = () => ( - - - - - - - - - - - - - - -); - -export default ChartContainer; diff --git a/docs/knowledge-base/examples/charts/chart-color-by-category/bubble-data.json b/docs/knowledge-base/examples/charts/chart-color-by-category/bubble-data.json deleted file mode 100644 index 50772fe2..00000000 --- a/docs/knowledge-base/examples/charts/chart-color-by-category/bubble-data.json +++ /dev/null @@ -1,63 +0,0 @@ -[ - { - "x": -2500, - "y": 50000, - "size": 500000, - "category": "Microsoft" - }, - { - "x": 100, - "y": 20000, - "size": 7600000, - "category": "Starbucks" - }, - { - "x": 500, - "y": 110000, - "size": 7600000, - "category": "Starbucks" - }, - { - "x": 7000, - "y": 19000, - "size": 700000, - "category": "Google" - }, - { - "x": 1400, - "y": 150000, - "size": 700000, - "category": "Publix Super Markets" - }, - { - "x": 2400, - "y": 30000, - "size": 300000, - "category": "PricewaterhouseCoopers" - }, - { - "x": 2450, - "y": 34000, - "size": 90000, - "category": "Cisco" - }, - { - "x": 2700, - "y": 34000, - "size": 400000, - "category": "Accenture" - }, - { - "x": 2900, - "y": 40000, - "size": 450000, - "category": "Deloitte" - }, - { - "x": 3000, - "y": 55000, - "size": 900000, - "category": "Whole Foods Market" - } - ] - \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/chart-color-by-category/main.jsx b/docs/knowledge-base/examples/charts/chart-color-by-category/main.jsx deleted file mode 100644 index be93b206..00000000 --- a/docs/knowledge-base/examples/charts/chart-color-by-category/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import ChartContainer from './app'; - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/chart-rounded-bar-corners/app.jsx b/docs/knowledge-base/examples/charts/chart-rounded-bar-corners/app.jsx deleted file mode 100644 index b10b8ec4..00000000 --- a/docs/knowledge-base/examples/charts/chart-rounded-bar-corners/app.jsx +++ /dev/null @@ -1,90 +0,0 @@ -import * as React from 'react'; -import { - Chart, - ChartSeries, - ChartSeriesItem, - ChartCategoryAxis, - ChartCategoryAxisItem, - ChartTitle, - ChartLegend, -} from '@progress/kendo-react-charts'; -import { Circle, Path, geometry, Group } from '@progress/kendo-drawing'; -const { transform, Circle: GeomCircle } = geometry; -import 'hammerjs'; -const categories = [2002, 2003, 2004]; -const series = [ - { - name: 'India', - data: [4, 7.943, 7.848], - }, - { - name: 'Russian Federation', - data: [4.743, 7.295, 7.175], - }, - { - name: 'Germany', - data: [0.01, 0.375, 1.161], - }, - { - name: 'World', - data: [1.988, 2.733, 3.994], - }, -]; -const mySeriesVisual = (e) => { - var width = e.rect.size.width; - var height = e.rect.size.height; - var radius = height / 2; - var originY = e.rect.origin.y; - var originX = e.rect.origin.x; - var pointX = originX; - var pointY = originY; - - const geometry = new GeomCircle( - [pointX + width - radius, pointY + radius], - radius - ); - - const circle = new Circle(geometry, { - stroke: { color: e.series.color, width: 1 }, - fill: { color: e.series.color }, - }); - - const path = new Path({ - stroke: { color: e.series.color, width: 1 }, - fill: { color: e.series.color }, - }); - path - .moveTo(pointX, originY) - .lineTo(originX + width - radius, originY) - .lineTo(originX + width - radius, originY + height) - .lineTo(pointX, originY + height) - .close(); - - const group = new Group(); - group.append(circle, path); - - return group; -}; - -const ChartContainer = () => ( - - - - - - - - {series.map((item, idx) => ( - - ))} - - -); - -export default ChartContainer; \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/chart-rounded-bar-corners/main.jsx b/docs/knowledge-base/examples/charts/chart-rounded-bar-corners/main.jsx deleted file mode 100644 index be93b206..00000000 --- a/docs/knowledge-base/examples/charts/chart-rounded-bar-corners/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import ChartContainer from './app'; - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/heatmap-custom-series-item/app.jsx b/docs/knowledge-base/examples/charts/heatmap-custom-series-item/app.jsx deleted file mode 100644 index ca73d86f..00000000 --- a/docs/knowledge-base/examples/charts/heatmap-custom-series-item/app.jsx +++ /dev/null @@ -1,94 +0,0 @@ -import * as React from 'react'; -import 'hammerjs'; -import { - Chart, - ChartSeries, - ChartSeriesItem, - ChartSeriesLabels, - ChartSeriesMarkers, - ChartXAxis, - ChartXAxisItem, -} from '@progress/kendo-react-charts'; - -import { Path } from '@progress/kendo-drawing'; -//Data generator -function makeDataObjects(rows, cols) { - const data = []; - - for (let rowIndex = 0; rowIndex < rows; rowIndex++) { - Array.from(Array(cols)).map((_, colIndex) => { - data.push({ - a: `А${rowIndex + 1}`, - b: `B${colIndex + 1}`, - value: cols + rowIndex * colIndex, - }); - }); - } - - return data; -} -//Generate test data -const data = makeDataObjects(10, 10); - -//Custom rendering for the series item -const myCustomMarker = (e) => { - var width = e.rect.size.width - 3; - var height = e.rect.size.height - 3; - var originY = e.rect.origin.y; - var originX = e.rect.origin.x; - const path = new Path({ - stroke: { color: e.series.color, width: 1 }, // you can set the width to 0 if you don't want border - fill: { color: e.options.background }, - }); - const borderRadius = 3; - path - .moveTo(originX + borderRadius, originY) - .lineTo(originX + width - borderRadius, originY) - .arcTo( - [originX + width, originY + borderRadius], - borderRadius, - borderRadius, - false - ) - .lineTo(originX + width, originY + height - borderRadius) - .arc(0, 90, borderRadius, borderRadius) - .lineTo(originX + borderRadius, originY + height) - .arc(90, 180, borderRadius, borderRadius) - .lineTo(originX, originY + borderRadius) - .arc(180, 270, borderRadius, borderRadius) - .close(); - - return path; -}; -const ChartContainer = () => { - const [shape, setShape] = React.useState('roundedRect'); - - return ( -
- - - - - - - - - - - -
- ); -}; - -export default ChartContainer; \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/heatmap-custom-series-item/main.jsx b/docs/knowledge-base/examples/charts/heatmap-custom-series-item/main.jsx deleted file mode 100644 index b85100e7..00000000 --- a/docs/knowledge-base/examples/charts/heatmap-custom-series-item/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import ChartContainer from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/limiting-axis-labels-count/app.jsx b/docs/knowledge-base/examples/charts/limiting-axis-labels-count/app.jsx deleted file mode 100644 index 1b03202c..00000000 --- a/docs/knowledge-base/examples/charts/limiting-axis-labels-count/app.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as React from 'react'; -import { - Chart, - ChartTooltip, - ChartSeries, - ChartSeriesItem, - ChartCategoryAxis, - ChartCategoryAxisItem, -} from '@progress/kendo-react-charts'; -import 'hammerjs'; -const generateData = () => { - let data = []; - for (var i = 0; i < 100; i++) { - data.push({ period: i, value: Math.random() * 1000 }); - } - return data; -}; -const curveValues = generateData(); - -const ChartContainer = () => ( - - - - - - - - - -); - -export default ChartContainer; \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/limiting-axis-labels-count/main.jsx b/docs/knowledge-base/examples/charts/limiting-axis-labels-count/main.jsx deleted file mode 100644 index b85100e7..00000000 --- a/docs/knowledge-base/examples/charts/limiting-axis-labels-count/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import ChartContainer from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/set-colors/app.jsx b/docs/knowledge-base/examples/charts/set-colors/app.jsx deleted file mode 100644 index 259e04e6..00000000 --- a/docs/knowledge-base/examples/charts/set-colors/app.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import * as React from 'react'; - -import { - Chart, - ChartSeries, - ChartSeriesItem, - ChartCategoryAxis, - ChartCategoryAxisItem, - ChartTitle, - ChartLegend -} from '@progress/kendo-react-charts'; - -const categories = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011]; -const series = [{ - name: 'India', - data: [3.907, 7.943, 7.848, 9.284, 9.263, 9.801, 3.890, 8.238, 9.552, 6.855], - color: 'blue' -}, { - name: 'Russian Federation', - data: [4.743, 7.295, 7.175, 6.376, 8.153, 8.535, 5.247, -7.832, 4.3, 4.3], - color: 'green' -}, { - name: 'Germany', - data: [0.010, -0.375, 1.161, 0.684, 3.7, 3.269, 1.083, -5.127, 3.690, 2.995], - color: 'yellow' -}, { - name: 'World', - data: [1.988, 2.733, 3.994, 3.464, 4.001, 3.939, 1.333, -2.245, 4.339, 2.727], - color: 'pink' -}]; - -const ChartContainer = () => ( - - - - - - - - {series.map((item, idx) => ( - ))} - - -); - -export default ChartContainer; - diff --git a/docs/knowledge-base/examples/charts/set-colors/main.jsx b/docs/knowledge-base/examples/charts/set-colors/main.jsx deleted file mode 100644 index b85100e7..00000000 --- a/docs/knowledge-base/examples/charts/set-colors/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import ChartContainer from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/set-multiple-x-axes/app.jsx b/docs/knowledge-base/examples/charts/set-multiple-x-axes/app.jsx deleted file mode 100644 index af5bed71..00000000 --- a/docs/knowledge-base/examples/charts/set-multiple-x-axes/app.jsx +++ /dev/null @@ -1,150 +0,0 @@ -import * as React from 'react'; -import { - Chart, - ChartSeries, - ChartSeriesItem, - ChartCategoryAxis, - ChartCategoryAxisItem, - ChartTitle, - ChartLegend, - ChartValueAxis, - ChartValueAxisItem, -} from '@progress/kendo-react-charts'; -import 'hammerjs'; -const categories = [ - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '10', - '11', - '12', - '13', - '14', - '15', - '16', - '17', - '18', - '19', - '20', - '21', - '22', - '23', - '24', - '25', - '26', - '27', - '28', - '29', - '30', - '31', -]; -const LineType = 'line'; -const AreaType = 'area'; -const series = [ - { - type: LineType, - data: [ - 6, 10, 10, 10, 10, 9, 5, 5, 10, 8, 8, 5, 8, 11, 9, 15, 20, 23, 24, 21, 21, - 20, 22, 22, 20, 18, 16, 15, 20, 13.2, 18, - ], - name: 'Max. Temperature [°C]', - color: '#ff1c1c', - axis: 'temp', - }, - { - type: LineType, - data: [ - -5, -6, 0, -4, -3, -5.2, -5, -1.7, -1, 0, -0.4, -2, -2, -5, 4, -2, -4, -1, - -1, 2, 4, -1, 1, 1, 4, 0, -1, 1, -2, 5.7, 5, - ], - name: 'Min. Temperature [°C]', - color: '#ffae00', - axis: 'temp', - }, - { - type: AreaType, - data: [ - 16.4, 21.7, 35.4, 19, 10.9, 13.6, 10.9, 10.9, 10.9, 16.4, 16.4, 13.6, - 13.6, 29.9, 27.1, 16.4, 13.6, 10.9, 16.4, 10.9, 24.5, 10.9, 8.1, 19, 21.7, - 27.1, 24.5, 16.4, 27.1, 29.9, 27.1, - ], - name: 'Wind Speed [km/h]', - color: '#73c100', - axis: 'wind', - }, - { - type: AreaType, - data: [ - 5.4, 2, 5.4, 3, 2, 1, 3.2, 7.4, 0, 8.2, 0, 1.8, 0.3, 0, 0, 2.3, 0, 3.7, - 5.2, 6.5, 0, 7.1, 0, 4.7, 0, 1.8, 0, 0, 0, 1.5, 0.8, - ], - name: 'Rainfall [mm]', - color: '#007eff', - axis: 'rain', - }, -]; -const valueAxis = [ - { - name: 'rain', - color: '#007eff', - }, - { - name: 'wind', - color: '#73c100', - min: 0, - max: 60, - }, - { - name: 'temp', - }, -]; -const axisCrossingValue = [32, 32, 0]; - -const ChartContainer = () => ( - - - - - - - - - {series.map((item, idx) => ( - - ))} - - - {valueAxis.map((item, idx) => ( - - ))} - - -); - -export default ChartContainer; \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/set-multiple-x-axes/main.jsx b/docs/knowledge-base/examples/charts/set-multiple-x-axes/main.jsx deleted file mode 100644 index b85100e7..00000000 --- a/docs/knowledge-base/examples/charts/set-multiple-x-axes/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import ChartContainer from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/set-plotbands-on-plot-area-click/app.jsx b/docs/knowledge-base/examples/charts/set-plotbands-on-plot-area-click/app.jsx deleted file mode 100644 index ca8b18e8..00000000 --- a/docs/knowledge-base/examples/charts/set-plotbands-on-plot-area-click/app.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import * as React from 'react'; - -import { - Chart, - ChartCategoryAxis, - ChartCategoryAxisItem, - ChartValueAxis, - ChartValueAxisItem, - ChartSeries, - ChartSeriesItem -} from '@progress/kendo-react-charts'; - -import 'hammerjs'; - -const data = [1, 2, 3]; -const categories = ['A', 'B', 'C']; -const crosshair = { - visible: true, - tooltip: { - visible: true, - format: '#.##' - } -}; - -const ChartContainer = () => { - - const [plotBands, setPlotBands] = React.useState({ - category: [{ - from: -1, - to: -1, - color: 'green', - opacity: 0.3 - }], - value: [{ - from: -1, - to: -1, - color: 'navy', - opacity: 0.3 - }] - }) - - - const onPlotAreaClick = (args) => { - console.log(`Category: ${ args.category }`); - console.log(`Value: ${ args.value }`); - - let category = 0; - - args.category === 'B' ? category = 1 : args.category === 'C' ? category = 2 : null - - setPlotBands({ - category: [{ - from: category, - to: category, - color: 'green', - opacity: 0.3 - }], - value: [{ - from: args.value, - to: args.value + 0.02, - color: 'navy', - opacity: 0.3 - }] - }) - } - - return ( - <> - - - - - - - - - - - - - ) -} - -export default ChartContainer; \ No newline at end of file diff --git a/docs/knowledge-base/examples/charts/set-plotbands-on-plot-area-click/main.jsx b/docs/knowledge-base/examples/charts/set-plotbands-on-plot-area-click/main.jsx deleted file mode 100644 index b85100e7..00000000 --- a/docs/knowledge-base/examples/charts/set-plotbands-on-plot-area-click/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import ChartContainer from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/conversational-ui/chat-maxlength-char-count/app.tsx b/docs/knowledge-base/examples/conversational-ui/chat-maxlength-char-count/app.tsx deleted file mode 100644 index 7123fdea..00000000 --- a/docs/knowledge-base/examples/conversational-ui/chat-maxlength-char-count/app.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import * as React from 'react'; -import { - Chat, - Message, - ChatMessageBoxProps, -} from '@progress/kendo-react-conversational-ui'; -import { Input } from '@progress/kendo-react-inputs'; - -const user = { - id: 1, - avatarUrl: - 'https://demos.telerik.com/kendo-ui/content/web/Customers/RICSU.jpg', - avatarAltText: 'KendoReact Conversational UI RICSU', -}; - -const AttachmentTemplate = (props) => { - let attachment = props.item; - return ( -
-
- -
-
- ); -}; - -const CustomTextInput = ({ onSend }) => { - const [value, setValue] = React.useState(''); - const max: number = 5; - - const handleChange = (event: React.ChangeEvent) => { - setValue(event.target.value); - }; - - const handleKeyDown = (event: React.KeyboardEvent) => { - if (event.key === 'Enter' && value.trim()) { - onSend({ - author: user, - text: value, - timestamp: new Date(), - }); - setValue(''); - } - }; - - return ( - <> - -
{`${value.length}/${max}`}
- - ); -}; - -const App = () => { - const [messages, setMessages] = React.useState([]); - - const addNewMessage = (event: any) => { - setMessages([...messages, event.message]); - }; - - const customMessage = (props: ChatMessageBoxProps) => { - const handleCustomSend = (message: Message) => { - setMessages([...messages, message]); - }; - - return ( - <> - {props.sendButton} - - - ); - }; - - return ( - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/conversational-ui/chat-maxlength-char-count/main.tsx b/docs/knowledge-base/examples/conversational-ui/chat-maxlength-char-count/main.tsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/conversational-ui/chat-maxlength-char-count/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/conversational-ui/chat-scroll-to-bottom/app.jsx b/docs/knowledge-base/examples/conversational-ui/chat-scroll-to-bottom/app.jsx deleted file mode 100644 index 8d62ad94..00000000 --- a/docs/knowledge-base/examples/conversational-ui/chat-scroll-to-bottom/app.jsx +++ /dev/null @@ -1,57 +0,0 @@ -import * as React from "react"; -import { Chat } from "@progress/kendo-react-conversational-ui"; -const user = { - id: 1, - avatarUrl: - "https://demos.telerik.com/kendo-ui/content/web/Customers/RICSU.jpg", - avatarAltText: "KendoReact Conversational UI RICSU", -}; -const bot = { - id: 0, -}; -const initialMessages = [ - { - author: bot, - suggestedActions: [ - { - type: "reply", - value: "Neat!", - }, - ], - timestamp: new Date(), - text: "Hello, this is a demo bot. I don't do much, but I can count symbols!", - }, -]; -const App = () => { - const [messages, setMessages] = React.useState(initialMessages); - const addNewMessage = (event) => { - let botResponse = Object.assign({}, event.message); - botResponse.text = countReplayLength(event.message.text); - botResponse.author = bot; - setMessages([...messages, event.message]); - setTimeout(() => { - setMessages((oldMessages) => [...oldMessages, botResponse]); - const messageList = document.querySelector(".k-message-list"); - if (messageList) { - messageList.scrollTop = messageList.scrollHeight; - } - }, 1000); - }; - const countReplayLength = (question) => { - let length = question.length; - let answer = question + " contains exactly " + length + " symbols."; - return answer; - }; - return ( -
- -
- ); -}; -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/conversational-ui/chat-scroll-to-bottom/main.jsx b/docs/knowledge-base/examples/conversational-ui/chat-scroll-to-bottom/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/conversational-ui/chat-scroll-to-bottom/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/app.jsx b/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/app.jsx deleted file mode 100644 index 7e6b815f..00000000 --- a/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/app.jsx +++ /dev/null @@ -1,101 +0,0 @@ -import * as React from 'react'; -import { DateRangePicker } from '@progress/kendo-react-dateinputs'; -import { Popup } from '@progress/kendo-react-popup'; -import './styles.css'; - -const MyContext = React.createContext({}); -const CustomPopup = (props) => { - const { setPickerValue } = React.useContext(MyContext); - const setToday = () => { - setPickerValue({ start: new Date(), end: new Date() }); - }; - - const setWeek = (ev) => { - let curr = new Date(); // get current date - let first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week - let last = first + 6; // last day is the first day + 6 - - let firstday = new Date(curr.setDate(first)); - let lastDay = new Date(curr.setDate(last)); - setPickerValue({ start: firstday, end: lastDay }); - }; - - const setMonth = (ev) => { - let date = new Date(); - let y = date.getFullYear(); - let m = new Date().getMonth(); - - let firstDay = new Date(y, m, 1); - let lastDay = new Date(y, m + 1, 0); - setPickerValue({ start: firstDay, end: lastDay }); - }; - - return ( - -
-
-
-
- Today -
-
- This week -
-
- This month -
-
-
- - {props.children} - -
-
- ); -}; - -const App = () => { - const [pickerValue, setPickerValue] = React.useState(null); - - const onChange = (ev) => { - setPickerValue(ev.value); - }; - return ( -
- - - -
- ); -}; -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/main.jsx b/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/styles.css b/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/styles.css deleted file mode 100644 index 1991bb52..00000000 --- a/docs/knowledge-base/examples/dateinputs/daterangepicker-predefined-ranges/styles.css +++ /dev/null @@ -1,12 +0,0 @@ -.preset-buttons { - padding: 5px; - margin: 5px; - cursor: pointer; - background-color: #eee; - border-radius: 5px; - margin-left: 5px; - } - .preset-buttons:hover { - background-color: #ccc; - } - \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/daterangepicker-validate-range/app.jsx b/docs/knowledge-base/examples/dateinputs/daterangepicker-validate-range/app.jsx deleted file mode 100644 index cae5d80e..00000000 --- a/docs/knowledge-base/examples/dateinputs/daterangepicker-validate-range/app.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import * as React from 'react'; - -import { DateRangePicker } from '@progress/kendo-react-dateinputs'; - -const App = () => { - const [rangePickerValidation, setRangePickerValidation] = - React.useState(true); - - //Setting the valid property of the DateRangePicker to false if start date is after end date - const rangePickerChange = (ev) => { - setRangePickerValidation(ev.value.start < ev.value.end); - }; - return ( -
- - {!rangePickerValidation && ( -
- - * Start date should be before End date - -
- )} -
- ); -}; -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/daterangepicker-validate-range/main.jsx b/docs/knowledge-base/examples/dateinputs/daterangepicker-validate-range/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dateinputs/daterangepicker-validate-range/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/datetimepicker-conditional-set-button/app.jsx b/docs/knowledge-base/examples/dateinputs/datetimepicker-conditional-set-button/app.jsx deleted file mode 100644 index ca3eb4ab..00000000 --- a/docs/knowledge-base/examples/dateinputs/datetimepicker-conditional-set-button/app.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; - -import { DateTimePicker } from '@progress/kendo-react-dateinputs'; -import { Calendar } from '@progress/kendo-react-dateinputs'; - -const App = () => { - const [value, setValue] = React.useState(new Date()); - const [valid, setValid] = React.useState(); - - const CustomCalendar = (props) => { - const handleCalendarChange = (e) => { - let date1 = e.value; - let date2 = new Date(); - - if (date1 <= date2) { - document - .getElementsByClassName('k-time-accept')[0] - .classList.remove('k-disabled'); - setValid(true); - } else { - document - .getElementsByClassName('k-time-accept')[0] - .classList.add('k-disabled'); - setValid(false); - } - - props.onChange(e); - setValue(e.value); - }; - - return ( - - ); - }; - - const handleChange = (e) => { - setValue(e.value); - }; - - return ( -
-

Enter date:

- -
- ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/datetimepicker-conditional-set-button/main.jsx b/docs/knowledge-base/examples/dateinputs/datetimepicker-conditional-set-button/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dateinputs/datetimepicker-conditional-set-button/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/multiviewcalendar-control-focus-date/app.jsx b/docs/knowledge-base/examples/dateinputs/multiviewcalendar-control-focus-date/app.jsx deleted file mode 100644 index 6c80e6aa..00000000 --- a/docs/knowledge-base/examples/dateinputs/multiviewcalendar-control-focus-date/app.jsx +++ /dev/null @@ -1,117 +0,0 @@ -import * as React from 'react'; -import { MultiViewCalendar } from '@progress/kendo-react-dateinputs'; -import { cloneDate, addDays } from '@progress/kendo-date-math'; -const EMPTY_SELECTIONRANGE = { - start: null, - end: null -}; - -const App = () => { - const [state, setState] = React.useState({ - value: null, - mode: 'range' - }); - - const handleChange = event => { - setState({ - ...state, - value: event.value - }); - }; - - const handleSpecialClick = () => { - const today = new Date(); - const christmas = { - start: new Date(today.getFullYear(), 11, 24), - end: new Date(today.getFullYear(), 11, 26) - }; - setState({ - mode: 'range', - value: christmas - }); - this.cal.setState({ focusedDate: christmas.start }); - }; - - const handleArrayClick = () => { - if (state.mode === 'multiple') { - return; - } - - let range = state.value || EMPTY_SELECTIONRANGE; - let value = splitRangeToDays(range.start, range.end); - setState({ - value, - mode: 'multiple' - }); - }; - - const handleRangeClick = () => { - if (state.mode === 'range') { - return; - } - - let dates = state.value; - let value = extractRangeFromDays(dates); - setState({ - value, - mode: 'range' - }); - }; - - const extractRangeFromDays = dates => { - let start = null; - let end = null; - dates.forEach(date => { - if (!start || date.getTime() < start.getTime()) { - start = date; - } - - if (!end || end.getTime() < date.getTime()) { - end = date; - } - }); - return start && end ? { - start, - end - } : null; - }; - - const splitRangeToDays = (start, end) => { - let dates = []; - - if (!start && !end) { - return dates; - } - - if (start && !end) { - return [start]; - } - - let currentDate = cloneDate(start || undefined); - - while (currentDate && end && currentDate.getTime() <= end.getTime()) { - dates.push(cloneDate(currentDate)); - currentDate = addDays(currentDate, 1); - } - - return dates; - }; - - return
-
-
- - -
-
- -
-
- this.cal = cal} - value={state.value} onChange={handleChange} topView="month" /> -
; -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dateinputs/multiviewcalendar-control-focus-date/main.jsx b/docs/knowledge-base/examples/dateinputs/multiviewcalendar-control-focus-date/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dateinputs/multiviewcalendar-control-focus-date/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdownlist/dropdownlist-clear-value/app.tsx b/docs/knowledge-base/examples/dropdownlist/dropdownlist-clear-value/app.tsx deleted file mode 100644 index 9c403c63..00000000 --- a/docs/knowledge-base/examples/dropdownlist/dropdownlist-clear-value/app.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react'; - -import { DropDownList } from '@progress/kendo-react-dropdowns'; - -class AppComponent extends React.Component { - valueRender = (element: React.ReactElement, value) => { - if (!value) { - return element; - } - - const children = [ - - {element.props.children} - , - , - ]; - - return React.cloneElement(element, { ...element.props }, children); - }; - - clearValue = (e: React.MouseEvent) => { - e.stopPropagation(); - e.preventDefault(); - - this.setState({ value: null }); - }; - sizes: string[] = [ - 'X-Small', - 'Small', - 'Medium', - 'Large', - 'X-Large', - '2X-Large', - ]; - state = { - value: 'Medium', - }; - - handleChange = (event) => { - this.setState({ - value: event.target.value, - }); - }; - - render() { - return ( -
- -
- ); - } -} - -export default AppComponent; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdownlist/dropdownlist-clear-value/main.tsx b/docs/knowledge-base/examples/dropdownlist/dropdownlist-clear-value/main.tsx deleted file mode 100644 index 80a0d7bf..00000000 --- a/docs/knowledge-base/examples/dropdownlist/dropdownlist-clear-value/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import AppComponent from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdownlist/request-every-ten-items/app.jsx b/docs/knowledge-base/examples/dropdownlist/request-every-ten-items/app.jsx deleted file mode 100644 index 94560751..00000000 --- a/docs/knowledge-base/examples/dropdownlist/request-every-ten-items/app.jsx +++ /dev/null @@ -1,163 +0,0 @@ -import * as React from 'react'; -import { DropDownList } from '@progress/kendo-react-dropdowns'; -const textField = 'ContactName'; -const keyField = 'CustomerID'; -const defaultItem = { - [textField]: 'Select customer...', - [keyField]: null, -}; -const emptyItem = { - [textField]: 'loading ...', -}; -const pageSize = 20; -const loadingData = []; - -while (loadingData.length < pageSize) { - loadingData.push({ ...emptyItem }); -} - -const baseUrl = `https://odatasampleservices.azurewebsites.net/V4/Northwind/Northwind.svc/`; -const init = { - method: 'GET', - accept: 'application/json', - headers: [], -}; - -const App = () => { - const dataCaching = React.useRef([]); - const pendingRequest = React.useRef(); - const requestStarted = React.useRef(false); - const [data, setData] = React.useState([]); - const [value, setValue] = React.useState(null); - const [total, setTotal] = React.useState(0); - const [filter, setFilter] = React.useState(''); - const skipRef = React.useRef(0); - - const resetCach = () => { - dataCaching.current.length = 0; - }; - - const requestData = React.useCallback((skip, filter) => { - if (requestStarted.current) { - clearTimeout(pendingRequest.current); - pendingRequest.current = setTimeout(() => { - requestData(skip, filter); - }, 50); - return; - } - - const url = - baseUrl + - `Customers?$filter=contains(ContactName,'${filter}')&$skip=${skip}&$top=${pageSize}&$count=true`; - requestStarted.current = true; - fetch(url, init) - .then((response) => response.json()) - .then((json) => { - const total = json['@odata.count']; - const items = []; - json.value.forEach((element, index) => { - const { CustomerID, ContactName } = element; - const item = { - [keyField]: CustomerID, - [textField]: ContactName, - }; - items.push(item); - dataCaching.current[index + skip] = item; - }); - - if (skip === skipRef.current) { - setData(items); - setTotal(total); - } - - requestStarted.current = false; - }); - }, []); - React.useEffect(() => { - requestData(0, filter); - return () => { - resetCach(); - }; - }, [filter, requestData]); - const onFilterChange = React.useCallback( - (event) => { - const filter = event.filter.value; - resetCach(); - requestData(0, filter); - setData(loadingData); - skipRef.current = 0; - setFilter(filter); - }, - [requestData] - ); - const shouldRequestData = React.useCallback((skip) => { - console.log('shouldRequestData', skip); - if (skip % 10 !== 0) { - return false; - } - - for (let i = 0; i < pageSize; i++) { - if (!dataCaching.current[skip + i]) { - return true; - } - } - - return false; - }, []); - const getCachedData = React.useCallback((skip) => { - const data = []; - - for (let i = 0; i < pageSize; i++) { - data.push(dataCaching.current[i + skip] || { ...emptyItem }); - } - - return data; - }, []); - const pageChange = React.useCallback( - (event) => { - const newSkip = event.page.skip; - - if (shouldRequestData(newSkip)) { - console.log('requestData'); - requestData(newSkip, filter); - } - - const data = getCachedData(newSkip); - setData(data); - skipRef.current = newSkip; - }, - [filter, getCachedData, requestData, shouldRequestData] - ); - const onChange = React.useCallback((event) => { - const value = event.target.value; - - if (value && value[textField] === emptyItem[textField]) { - return; - } - - setValue(value); - }, []); - return ( - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdownlist/request-every-ten-items/main.jsx b/docs/knowledge-base/examples/dropdownlist/request-every-ten-items/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dropdownlist/request-every-ten-items/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdowns/combobox-open-on-focus-and-tab/app.jsx b/docs/knowledge-base/examples/dropdowns/combobox-open-on-focus-and-tab/app.jsx deleted file mode 100644 index ceb03a37..00000000 --- a/docs/knowledge-base/examples/dropdowns/combobox-open-on-focus-and-tab/app.jsx +++ /dev/null @@ -1,57 +0,0 @@ -import * as React from 'react'; -import { ComboBox } from '@progress/kendo-react-dropdowns'; - -const sports = [ - { text: 'Basketball', id: 1 }, - { text: 'Football', id: 2 }, - { text: 'Tennis', id: 3 }, - { text: 'Volleyball', id: 4 }, -]; - -class App extends React.Component { - state = { - value: { text: 'Football', id: 2 }, - }; - handleChange = (event) => { - this.setState({ - value: event.target.value, - }); - }; - - onComboBoxFocus = (props) => { - setTimeout(() => { - if (!props.target.state.opened) { - props.target.toggleBtnClick(); - } - }); - }; - render() { - return ( -
-
- -
- -
- -
-
- ); - } -} - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdowns/combobox-open-on-focus-and-tab/main.jsx b/docs/knowledge-base/examples/dropdowns/combobox-open-on-focus-and-tab/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dropdowns/combobox-open-on-focus-and-tab/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdowns/combobox-open-popup-initially/app.jsx b/docs/knowledge-base/examples/dropdowns/combobox-open-popup-initially/app.jsx deleted file mode 100644 index 8d594049..00000000 --- a/docs/knowledge-base/examples/dropdowns/combobox-open-popup-initially/app.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import * as React from 'react'; -import { ComboBox } from '@progress/kendo-react-dropdowns'; -const allData = [ - { - id: 1, - text: 'Small', - }, - { - id: 2, - text: 'Medium', - }, - { - id: 3, - text: 'Large', - }, -]; - -const App = () => { - const ddlRef = React.useRef(); - - React.useEffect(() => { - ddlRef.current.toggleBtnClick(); - }, []); - return ( - <> - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdowns/combobox-open-popup-initially/main.jsx b/docs/knowledge-base/examples/dropdowns/combobox-open-popup-initially/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dropdowns/combobox-open-popup-initially/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/app.jsx b/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/app.jsx deleted file mode 100644 index c5f79ae8..00000000 --- a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/app.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import * as React from 'react'; -import { DateRangePicker } from '@progress/kendo-react-dateinputs'; -import CustomStartDateInput from './customStartDateInput'; -import CustomEndDateInput from './customEndDateInput'; -const App = () => { - const min = new Date(2018, 8, 1); - const max = new Date(2018, 9, 25); - const defaultValue = { - start: new Date(2018, 8, 5), - end: new Date(2018, 9, 13), - }; - return ( - - ); -}; -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/customEndDateInput.jsx b/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/customEndDateInput.jsx deleted file mode 100644 index a2d32d75..00000000 --- a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/customEndDateInput.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react'; -import { DateInput } from '@progress/kendo-react-dateinputs'; -import { Label, Error } from '@progress/kendo-react-labels'; -const CustomEndDateInput = (props) => { - const [value, setValue] = React.useState(new Date(props.value)); - const [valid, setValid] = React.useState(true); - const style = { - color: props.value !== null ? 'green' : 'red', - }; - const compareDates = (date) => { - let max = new Date(props.max).getTime(); - let newdate = new Date(date).getTime(); - - if (max > newdate) { - setValid(true); - } else if (max < newdate) { - setValid(false); - } else { - //equal - setValid(true); - } - }; - const handleChange = (e) => { - compareDates(new Date(e.value)); - setValue(new Date(e.value)); - }; - return ( -
- -
- {!valid && {`value should be less than ${props.max}`}} -
-
- ); -}; -export default CustomEndDateInput; diff --git a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/customStartDateInput.jsx b/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/customStartDateInput.jsx deleted file mode 100644 index 3295938f..00000000 --- a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/customStartDateInput.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from 'react'; -import { DateInput } from '@progress/kendo-react-dateinputs'; -import { Label, Error } from '@progress/kendo-react-labels'; - -const CustomStartDateInput = (props) => { - const [value, setValue] = React.useState(new Date(props.value)); - const [valid, setValid] = React.useState(true); - const style = { - color: props.value !== null ? 'green' : 'red', - }; - const compareDates = (date) => { - let min = new Date(props.min).getTime(); - let newdate = new Date(date).getTime(); - - if (min < newdate) { - setValid(true); - } else if (min > newdate) { - setValid(false); - } else { - //equal - setValid(true); - } - }; - const handleChange = (e) => { - compareDates(new Date(e.value)); - setValue(new Date(e.value)); - }; - return ( -
- -
- {!valid && {`value should be greater than ${props.min}`}} -
-
- ); -}; -export default CustomStartDateInput; diff --git a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/main.jsx b/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/dropdowns/daterangepicker-validation/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/editor/add-non-editable-element/InsertShortcodeTool.jsx b/docs/knowledge-base/examples/editor/add-non-editable-element/InsertShortcodeTool.jsx deleted file mode 100644 index fcf5d6aa..00000000 --- a/docs/knowledge-base/examples/editor/add-non-editable-element/InsertShortcodeTool.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from "react"; -import { EditorUtils } from "@progress/kendo-react-editor"; -import { DropDownList } from "@progress/kendo-react-dropdowns"; - -const shortcodes = [ - { text: "Name", code: "{{name}}", id: 1 }, - { text: "Initials", code: "{{initials}}", id: 2 }, - { text: "Address (Street)", code: "{{address_street}}", id: 3 }, - { text: "Address (City)", code: "{{address_city}}", id: 4 }, - { text: "Address (State)", code: "{{address_state}}", id: 5 }, - { text: "Address (Zip)", code: "{{address_zip}}", id: 6 }, - { text: "Email", code: "{{email}}", id: 7 }, - { text: "Phone", code: "{{phone}}", id: 8 } -]; - -const defaultItem = { text: "Insert Shortcode", code: "", id: 0 }; - -export class InsertShortcodeTool extends React.Component { - handleChange = event => { - if (!event.target.value.code) { - return; - } - const { view } = this.props; - const schema = view.state.schema; - - // get the new node from the schema - const nodeType = schema.nodes.nonEditable; - - // create a new node with the selected text - const node = nodeType.createAndFill( - { class: "shortcode" }, - schema.text(event.target.value.code) - ); - - // Insert the new node - EditorUtils.insertNode(view, node); - view.focus(); - } - - render() { - const { view } = this.props; - const nodeType = view && view.state.schema.nodes.text; - const canInsert = view && EditorUtils.canInsert(view.state, nodeType); - - return ( - - ); - } -} diff --git a/docs/knowledge-base/examples/editor/add-non-editable-element/app.jsx b/docs/knowledge-base/examples/editor/add-non-editable-element/app.jsx deleted file mode 100644 index 133a8570..00000000 --- a/docs/knowledge-base/examples/editor/add-non-editable-element/app.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import * as React from "react"; -import { - Editor, - EditorTools, - EditorUtils, - ProseMirror -} from "@progress/kendo-react-editor"; -import { InsertShortcodeTool } from "./InsertShortcodeTool.jsx"; - -const { Bold, Italic, Underline, ViewHtml } = EditorTools; -const { Schema, EditorView, EditorState } = ProseMirror; - -// This is the node configuration -const nonEditable = { - name: "nonEditable", - inline: true, - group: "inline", - content: "inline+", - marks: "", - attrs: { - contenteditable: { default: null }, - class: { default: null }, - style: { default: null } - }, - atom: true, - parseDOM: [{ tag: "span.uneditable", priority: 51 }], - // The styles can be added via the class as well - toDOM: () => [ - "span", - { - contenteditable: false, - class: "uneditable", - style: "user-select: none; opacity: 0.5;" - }, - 0 - ] -}; - -class App extends React.Component { - html = `

sample paragraph

`; - - onMount = event => { - const { viewProps } = event; - const { plugins, schema } = viewProps.state; - - // Append a new node. - let nodes = schema.spec.nodes.addToEnd('nonEditable', nonEditable); - - // Create the new schema. - const mySchema = new Schema({ nodes: nodes, marks: schema.spec.marks }); - - // Create a new document using the modified schema. - const doc = EditorUtils.createDocument(mySchema, this.html); - - // Return the custom EditorView object that will be used by Editor. - return new EditorView( - { mount: event.dom }, - { - ...event.viewProps, - state: EditorState.create({ doc, plugins }) - } - ); - }; - - render() { - return ( - - ); - } -} - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/editor/add-non-editable-element/main.jsx b/docs/knowledge-base/examples/editor/add-non-editable-element/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/editor/add-non-editable-element/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/editor/add-span-with-class/app.jsx b/docs/knowledge-base/examples/editor/add-span-with-class/app.jsx deleted file mode 100644 index 8999f563..00000000 --- a/docs/knowledge-base/examples/editor/add-span-with-class/app.jsx +++ /dev/null @@ -1,60 +0,0 @@ -import * as React from 'react'; -import { Button } from '@progress/kendo-react-buttons'; -import { Editor, EditorTools, EditorUtils } from '@progress/kendo-react-editor'; - -const content = ` -

- The KendoReact Editor allows your users to edit HTML in a familiar, - user-friendly way.
The Editor provides the core HTML - editing engine, which includes text formatting, hyperlinks, and lists. - The component outputs identical HTML across all major browsers, - follows accessibility standards, and provides API for content manipulation. -

-`; - -const InsertSpan = (props) => { - const { view } = props; - const nodeType = view && view.state.schema.nodes.text; - const canInsert = view && EditorUtils.canInsert(view.state, nodeType); - return ( - - - - - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/excel/excel-conditional-styling/main.jsx b/docs/knowledge-base/examples/excel/excel-conditional-styling/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/excel/excel-conditional-styling/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/file-upload/app.jsx b/docs/knowledge-base/examples/form/file-upload/app.jsx deleted file mode 100644 index e68898ce..00000000 --- a/docs/knowledge-base/examples/form/file-upload/app.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react'; -import { Form, Field } from '@progress/kendo-react-form'; -import { Input } from '@progress/kendo-react-inputs'; -import { Upload } from '@progress/kendo-react-upload'; - -const UploadInput = (fieldRenderProps) => { - const onChangeHandler = (event) => { - fieldRenderProps.onChange({value: event.newState}); - }; - const onRemoveHandler = (event) => { - fieldRenderProps.onChange({value: event.newState}); - }; - return ( - - ); -}; -const App = () => { - const handleSubmit = (dataItem) => { - const {files, ...otherFields} = dataItem; - - const formData = new FormData(); - - formData.append('files', files.map(file => file.getRawFile())); - - Object.keys(otherFields).forEach(prop => { - formData.append(prop, otherFields[prop]); - }); - - // submit your formData - }; - return ( -
( - -
- Please fill in the fields: -
- -
-
- User Photos: - -
-
- -
- )} - /> - ); -}; - -export default App; - diff --git a/docs/knowledge-base/examples/form/file-upload/main.jsx b/docs/knowledge-base/examples/form/file-upload/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/form/file-upload/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/form-reset-and-change-initial-values/app.jsx b/docs/knowledge-base/examples/form/form-reset-and-change-initial-values/app.jsx deleted file mode 100644 index 0ccd0bfd..00000000 --- a/docs/knowledge-base/examples/form/form-reset-and-change-initial-values/app.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react'; -import { Form, Field, FormElement } from '@progress/kendo-react-form'; -import { Input } from '@progress/kendo-react-inputs'; -import { Button } from '@progress/kendo-react-buttons'; - -const App = () => { - const [formKey, setFormKey] = React.useState(1); - const [user, setUser] = React.useState({ - firstName: 'No name', - lastName: 'No name', - }); - - //Reseting the form to the initial values - const resetForm = () => { - setFormKey(formKey + 1); - }; - - //Changing the initial values and reseting the form by changing the key - const resetFormWithChangedValues = () => { - setUser({ - firstName: 'Changed name', - lastName: 'Changed name', - }); - setFormKey(formKey + 1); - }; - - const handleSubmit = (dataItem) => { - alert(JSON.stringify(dataItem, null, 2)); - //use the line below if you want to reset the form after submit - //setFormKey(formKey + 1); - }; - - return ( - - - -
-
( - -
- - Please fill in the fields: - -
- -
- -
- -
-
-
- -
-
- )} - /> - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/form-reset-and-change-initial-values/main.jsx b/docs/knowledge-base/examples/form/form-reset-and-change-initial-values/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/form/form-reset-and-change-initial-values/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/getting-editor-ref-and-keydown/app.jsx b/docs/knowledge-base/examples/form/getting-editor-ref-and-keydown/app.jsx deleted file mode 100644 index 7fe5d871..00000000 --- a/docs/knowledge-base/examples/form/getting-editor-ref-and-keydown/app.jsx +++ /dev/null @@ -1,101 +0,0 @@ -import * as React from 'react'; -import { - Form, - Field, - FormElement, - FieldWrapper, -} from '@progress/kendo-react-form'; -import { Label, Error, Hint } from '@progress/kendo-react-labels'; -import { Button } from '@progress/kendo-react-buttons'; -import { Input } from '@progress/kendo-react-inputs'; - -const FormInput = (fieldRenderProps) => { - const { - validationMessage, - touched, - label, - id, - valid, - disabled, - hint, - type, - optional, - refp, - ...others - } = fieldRenderProps; - const showValidationMessage = touched && validationMessage; - const showHint = !showValidationMessage && hint; - const hintId = showHint ? `${id}_hint` : ''; - const errorId = showValidationMessage ? `${id}_error` : ''; - return ( - - -
- - {showHint && {hint}} - {showValidationMessage && ( - {validationMessage} - )} -
-
- ); -}; - -const App = () => { - const handleSubmit = (dataItem) => alert(JSON.stringify(dataItem, null, 2)); - - //onKeyDown event of the "name" editor input - const onInputDateKeyDown = (props) => { - console.log('keydown'); - }; - const SupplierEditorRef = React.useRef(); - React.useEffect(() => { - //reference to the "name" editor input - console.log(SupplierEditorRef.current); - }, []); - return ( - ( - -
- - BOOK YOUR DREAM VACATION TODAY - - - - -
-
- )} - /> - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/getting-editor-ref-and-keydown/main.jsx b/docs/knowledge-base/examples/form/getting-editor-ref-and-keydown/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/form/getting-editor-ref-and-keydown/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/spinner-inside-submit-button/app.jsx b/docs/knowledge-base/examples/form/spinner-inside-submit-button/app.jsx deleted file mode 100644 index 904be1e0..00000000 --- a/docs/knowledge-base/examples/form/spinner-inside-submit-button/app.jsx +++ /dev/null @@ -1,103 +0,0 @@ -import * as React from 'react'; -import { Form, Field, FormElement } from '@progress/kendo-react-form'; -import { Error } from '@progress/kendo-react-labels'; -import { Input } from '@progress/kendo-react-inputs'; -import { Loader } from '@progress/kendo-react-indicators'; -import { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs'; -import { Button } from '@progress/kendo-react-buttons'; - -const emailRegex = new RegExp(/\S+@\S+\.\S+/); - -const emailValidator = (value) => - emailRegex.test(value) ? '' : 'Please enter a valid email.'; - -const EmailInput = (fieldRenderProps) => { - const { validationMessage, visited, ...others } = fieldRenderProps; - return ( -
- - {visited && validationMessage && {validationMessage}} -
- ); -}; - -const App = () => { - let [disabled, setDisabled] = React.useState(false); - const handleSubmit = (dataItem) => { - setIsSubmitting(true); - setDisabled(true); - }; - - const [isSubmitting, setIsSubmitting] = React.useState(false); - const [serverResponse, setServerResponse] = React.useState(); - - return ( - <> - {serverResponse && ( - setServerResponse('')}> -

- {serverResponse} -

-
- )} - - ( - -
- - Please fill in the fields: - -
- -
- -
- -
- -
- -
-
-
- - -
-
- )} - /> - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/spinner-inside-submit-button/main.jsx b/docs/knowledge-base/examples/form/spinner-inside-submit-button/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/form/spinner-inside-submit-button/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/form/spinner-inside-submit-button/spinner-inside-submit-button.gif b/docs/knowledge-base/examples/form/spinner-inside-submit-button/spinner-inside-submit-button.gif deleted file mode 100644 index 98059316..00000000 Binary files a/docs/knowledge-base/examples/form/spinner-inside-submit-button/spinner-inside-submit-button.gif and /dev/null differ diff --git a/docs/knowledge-base/examples/gantt/scroll-to-today/app.jsx b/docs/knowledge-base/examples/gantt/scroll-to-today/app.jsx deleted file mode 100644 index dbf395d3..00000000 --- a/docs/knowledge-base/examples/gantt/scroll-to-today/app.jsx +++ /dev/null @@ -1,177 +0,0 @@ -import * as React from 'react'; -import { - Gantt, - GanttWeekView, - GanttMonthView, - GanttDayView, - GanttYearView, - filterBy, - orderBy, - mapTree, - extendDataItem, - GanttTextFilter, - GanttDateFilter, -} from '@progress/kendo-react-gantt'; -import { getter } from '@progress/kendo-react-common'; -import { exampleTaskData, exampleDependencyData } from './data'; -const ganttStyle = { - height: 500, - width: '100%', -}; -const taskModelFields = { - id: 'id', - start: 'start', - end: 'end', - title: 'title', - percentComplete: 'percentComplete', - isRollup: 'isRollup', - isExpanded: 'isExpanded', - isInEdit: 'isInEdit', - children: 'children', -}; -const dependencyModelFields = { - id: 'id', - fromId: 'fromId', - toId: 'toId', - type: 'type', -}; -const getTaskId = getter(taskModelFields.id); -const columns = [ - { - field: taskModelFields.id, - title: 'ID', - width: 70, - }, - { - field: taskModelFields.title, - title: 'Title', - width: 200, - expandable: true, - filter: GanttTextFilter, - }, - { - field: taskModelFields.start, - title: 'Start', - width: 120, - format: '{0:MM/dd/yyyy}', - filter: GanttDateFilter, - }, - { - field: taskModelFields.end, - title: 'End', - width: 120, - format: '{0:MM/dd/yyyy}', - filter: GanttDateFilter, - }, -]; -const App = () => { - const [taskData] = React.useState(exampleTaskData); - const [dependencyData] = React.useState(exampleDependencyData); - const [expandedState, setExpandedState] = React.useState([7, 11, 12, 13]); - const [columnsState, setColumnsState] = React.useState(columns); - const onColumnResize = React.useCallback( - (event) => event.end && setColumnsState(event.columns), - [setColumnsState] - ); - const onColumnReorder = React.useCallback( - (event) => setColumnsState(event.columns), - [setColumnsState] - ); - const [dataState, setDataState] = React.useState({ - sort: [ - { - field: 'orderId', - dir: 'asc', - }, - ], - filter: [], - }); - const onDataStateChange = React.useCallback( - (event) => - setDataState({ - sort: event.dataState.sort, - filter: event.dataState.filter, - }), - [setDataState] - ); - const onExpandChange = React.useCallback( - (event) => { - const id = getTaskId(event.dataItem); - const newExpandedState = event.value - ? expandedState.filter((currentId) => currentId !== id) - : [...expandedState, id]; - setExpandedState(newExpandedState); - }, - [expandedState, setExpandedState] - ); - const processedData = React.useMemo(() => { - const filteredData = filterBy( - taskData, - dataState.filter, - taskModelFields.children - ); - const sortedData = orderBy( - filteredData, - dataState.sort, - taskModelFields.children - ); - return mapTree(sortedData, taskModelFields.children, (task) => - extendDataItem(task, taskModelFields.children, { - [taskModelFields.isExpanded]: expandedState.includes(getTaskId(task)), - }) - ); - }, [taskData, dataState, expandedState]); - - const ganttRef = React.useRef(); - React.useEffect(() => { - let todayCell = - ganttRef.current.element.getElementsByClassName('today_cell')[0]; - let scrollElement = ganttRef.current.element.getElementsByClassName( - 'k-treelist-scrollable' - )[0]; - let columnsElement = - ganttRef.current.element.getElementsByClassName('k-gantt-columns')[0]; - scrollElement.scroll({ - left: - todayCell.getBoundingClientRect().left - - scrollElement.getBoundingClientRect().left - - columnsElement.getBoundingClientRect().left + - 20, - }); - }, []); - const weekHeaderCell = (props) => { - let range = props.range; - let today = new Date(); - if (props.type == 'day' && range.start <= today && range.end > today) { - return *{props.text}; - } else { - return {props.text}; - } - }; - return ( -
- - - -
- ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/gantt/scroll-to-today/data.js b/docs/knowledge-base/examples/gantt/scroll-to-today/data.js deleted file mode 100644 index 085489ff..00000000 --- a/docs/knowledge-base/examples/gantt/scroll-to-today/data.js +++ /dev/null @@ -1,608 +0,0 @@ -export const exampleTaskTypeTaskData = [ - { - id: 7, - title: 'Software validation, research and implementation', - orderId: 0, - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-04T00:00:00.000Z'), - percentComplete: 0.45, - isExpanded: true, - // 'type': 'summary', - children: [ - { - id: 12, - title: 'Design', - orderId: 2, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-02T00:00:00.000Z'), - percentComplete: 1, - isExpanded: true, - // 'type': 'milestone' - }, - { - id: 13, - title: 'Implementation', - orderId: 3, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-03T00:10:00.000Z'), - percentComplete: 0.77, - isExpanded: true, - // 'type': 'regular' - }, - ], - }, - ]; - - export const exampleDependencyTypeTaskData = [ - { - id: 1, - title: 'FF - start', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 0.77, - }, - { - id: 2, - title: 'FF - end', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 0.64, - }, - { - id: 5, - title: 'FS - start', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 1, - }, - { - id: 6, - title: 'FS - end', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 0.8, - }, - { - id: 13, - title: 'SS - start', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 0.25, - }, - { - id: 14, - title: 'SS - end', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 0.25, - }, - { - id: 9, - title: 'SF - start', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 0.1, - }, - { - id: 10, - title: 'SF - end', - start: new Date('2014-06-01T00:00:00.000Z'), - end: new Date('2014-06-02T10:00:00.000Z'), - percentComplete: 0, - }, - ]; - - export const exampleDependencyTypeDependencyData = [ - { - id: 1, - fromId: 1, - toId: 2, - type: 0, - }, - { - id: 3, - fromId: 5, - toId: 6, - type: 1, - }, - { - id: 5, - fromId: 9, - toId: 10, - type: 2, - }, - { - id: 7, - fromId: 13, - toId: 14, - type: 3, - }, - ]; - - export const exampleFlatTaskData = [ - { - id: 7, - title: 'Software validation, research and implementation', - orderId: 0, - start: new Date(), - end: new Date(), - percentComplete: 0.45708333333333334, - isExpanded: true, - reportsTo: null, - }, - { - id: 11, - title: 'Research', - orderId: 1, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-07T00:00:00.000Z'), - percentComplete: 0.5766666666666667, - isExpanded: true, - reportsTo: 7, - }, - { - id: 19, - title: 'Validation with Customers', - orderId: 0, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-04T00:00:00.000Z'), - percentComplete: 0.25, - isExpanded: true, - reportsTo: 11, - }, - { - id: 20, - title: 'Market Research', - orderId: 1, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-03T02:00:00.000Z'), - percentComplete: 0.82, - isExpanded: true, - reportsTo: 11, - }, - { - id: 39, - title: 'Functional and Technical Specification', - orderId: 2, - start: new Date('2014-06-04T00:00:00.000Z'), - end: new Date('2014-06-07T00:00:00.000Z'), - percentComplete: 0.66, - isExpanded: true, - reportsTo: 11, - }, - { - id: 12, - title: 'Design', - orderId: 2, - start: new Date('2014-06-09T00:00:00.000Z'), - end: new Date('2014-06-14T00:00:00.000Z'), - percentComplete: 0.6, - isExpanded: true, - reportsTo: 7, - }, - { - id: 22, - title: 'UI Design', - orderId: 0, - start: new Date('2014-06-09T00:00:00.000Z'), - end: new Date('2014-06-11T00:00:00.000Z'), - percentComplete: 0.56, - isExpanded: true, - reportsTo: 12, - }, - { - id: 23, - title: 'HTML Prototype', - orderId: 1, - start: new Date('2014-06-11T00:00:00.000Z'), - end: new Date('2014-06-14T00:00:00.000Z'), - percentComplete: 0.64, - isExpanded: true, - reportsTo: 12, - }, - ]; - - export const exampleTaskData = [ - { - id: 7, - title: 'Software validation, research and implementation', - orderId: 0, - start: new Date(), - end: new Date(), - percentComplete: 0.45708333333333334, - isExpanded: true, - children: [ - { - id: 11, - title: 'Research', - orderId: 1, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-07T00:00:00.000Z'), - percentComplete: 0.5766666666666667, - isExpanded: true, - children: [ - { - id: 19, - title: 'Validation with Customers', - orderId: 0, - start: new Date('2022-01-02T00:00:00.000Z'), - end: new Date('2022-01-04T00:00:00.000Z'), - percentComplete: 0.25, - isExpanded: true, - }, - { - id: 20, - title: 'Market Research', - orderId: 1, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-03T02:00:00.000Z'), - percentComplete: 0.82, - isExpanded: true, - }, - { - id: 39, - title: 'Functional and Technical Specification', - orderId: 2, - start: new Date('2014-06-04T00:00:00.000Z'), - end: new Date('2014-06-07T00:00:00.000Z'), - percentComplete: 0.66, - isExpanded: true, - }, - ], - }, - { - id: 12, - title: 'Design', - orderId: 2, - start: new Date('2014-06-09T00:00:00.000Z'), - end: new Date('2014-06-14T00:00:00.000Z'), - percentComplete: 0.6, - isExpanded: true, - children: [ - { - id: 22, - title: 'UI Design', - orderId: 0, - start: new Date('2014-06-09T00:00:00.000Z'), - end: new Date('2014-06-11T00:00:00.000Z'), - percentComplete: 0.56, - isExpanded: true, - }, - { - id: 23, - title: 'HTML Prototype', - orderId: 1, - start: new Date('2014-06-11T00:00:00.000Z'), - end: new Date('2014-06-14T00:00:00.000Z'), - percentComplete: 0.64, - isExpanded: true, - }, - ], - }, - { - id: 13, - title: 'Implementation', - orderId: 3, - start: new Date('2014-06-11T00:00:00.000Z'), - end: new Date('2014-07-02T00:00:00.000Z'), - percentComplete: 0.77, - isExpanded: true, - children: [ - { - id: 24, - title: 'Prototype', - orderId: 0, - start: new Date('2014-06-11T00:00:00.000Z'), - end: new Date('2014-06-17T00:00:00.000Z'), - percentComplete: 0.77, - isExpanded: true, - }, - { - id: 26, - title: 'Architecture', - orderId: 1, - start: new Date('2014-06-17T00:00:00.000Z'), - end: new Date('2014-06-18T00:00:00.000Z'), - percentComplete: 0.82, - isExpanded: true, - }, - { - id: 27, - title: 'Data Layer', - orderId: 2, - start: new Date('2014-06-18T00:00:00.000Z'), - end: new Date('2014-06-24T00:00:00.000Z'), - percentComplete: 0.5, - isExpanded: true, - }, - { - id: 28, - title: 'Unit Tests', - orderId: 4, - start: new Date('2014-06-18T00:00:00.000Z'), - end: new Date('2014-06-27T00:00:00.000Z'), - percentComplete: 0.68, - isExpanded: true, - }, - { - id: 29, - title: 'UI and Interaction', - orderId: 3, - start: new Date('2014-06-27T00:00:00.000Z'), - end: new Date('2014-07-02T00:00:00.000Z'), - percentComplete: 0.6, - isExpanded: true, - }, - ], - }, - { - id: 14, - title: 'Testing', - orderId: 4, - start: new Date('2014-06-30T00:00:00.000Z'), - end: new Date('2014-07-05T00:00:00.000Z'), - percentComplete: 0.52, - isExpanded: true, - children: [ - { - id: 32, - title: 'Integration Testing', - orderId: 0, - start: new Date('2014-06-30T00:00:00.000Z'), - end: new Date('2014-07-05T00:00:00.000Z'), - percentComplete: 0.94, - isExpanded: true, - }, - { - id: 33, - title: 'Load Testing', - orderId: 1, - start: new Date('2014-06-30T00:00:00.000Z'), - end: new Date('2014-07-05T00:00:00.000Z'), - percentComplete: 0.1, - isExpanded: true, - }, - ], - }, - { - id: 17, - title: 'Release', - orderId: 7, - start: new Date('2014-07-12T00:00:00.000Z'), - end: new Date('2014-07-12T00:00:00.000Z'), - percentComplete: 0, - isExpanded: true, - }, - { - id: 18, - title: 'Project Kickoff', - orderId: 0, - start: new Date('2014-06-02T00:00:00.000Z'), - end: new Date('2014-06-02T00:00:00.000Z'), - percentComplete: 0.23, - isExpanded: true, - }, - { - id: 30, - title: 'Documentation', - orderId: 5, - start: new Date('2014-06-23T00:00:00.000Z'), - end: new Date('2014-07-05T00:00:00.000Z'), - percentComplete: 0.14, - isExpanded: true, - children: [ - { - id: 34, - title: 'Structure', - orderId: 0, - start: new Date('2014-06-23T00:00:00.000Z'), - end: new Date('2014-06-26T00:00:00.000Z'), - percentComplete: 0.28, - isExpanded: true, - }, - { - id: 35, - title: 'Articles', - orderId: 1, - start: new Date('2014-06-26T00:00:00.000Z'), - end: new Date('2014-07-05T00:00:00.000Z'), - percentComplete: 0, - isExpanded: true, - }, - ], - }, - { - id: 31, - title: 'Demos', - orderId: 6, - start: new Date('2014-06-30T00:00:00.000Z'), - end: new Date('2014-07-12T00:00:00.000Z'), - percentComplete: 0.82, - isExpanded: false, - children: [ - { - id: 36, - title: 'Structure', - orderId: 0, - start: new Date('2014-06-30T00:00:00.000Z'), - end: new Date('2014-07-02T00:00:00.000Z'), - percentComplete: 0.94, - isExpanded: true, - }, - { - id: 37, - title: 'Design', - orderId: 1, - start: new Date(), - end: new Date(), - percentComplete: 0.8, - isExpanded: true, - }, - { - id: 38, - title: 'Demos', - orderId: 2, - start: new Date('2014-07-03T00:00:00.000Z'), - end: new Date('2014-07-12T00:00:00.000Z'), - percentComplete: 0.72, - isExpanded: true, - }, - ], - }, - ], - }, - ]; - - export const exampleDependencyData = [ - { - id: 528, - fromId: 18, - toId: 19, - type: 1, - }, - { - id: 533, - fromId: 22, - toId: 23, - type: 1, - }, - { - id: 534, - fromId: 23, - toId: 24, - type: 1, - }, - { - id: 535, - fromId: 24, - toId: 26, - type: 1, - }, - { - id: 536, - fromId: 26, - toId: 27, - type: 1, - }, - { - id: 537, - fromId: 26, - toId: 28, - type: 1, - }, - { - id: 538, - fromId: 27, - toId: 29, - type: 1, - }, - { - id: 539, - fromId: 28, - toId: 29, - type: 0, - }, - { - id: 540, - fromId: 29, - toId: 32, - type: 1, - }, - { - id: 541, - fromId: 29, - toId: 33, - type: 1, - }, - { - id: 543, - fromId: 29, - toId: 36, - type: 1, - }, - { - id: 551, - fromId: 13, - toId: 29, - type: 0, - }, - { - id: 544, - fromId: 34, - toId: 35, - type: 1, - }, - { - id: 545, - fromId: 32, - toId: 33, - type: 0, - }, - { - id: 546, - fromId: 33, - toId: 17, - type: 1, - }, - { - id: 547, - fromId: 35, - toId: 17, - type: 1, - }, - { - id: 548, - fromId: 38, - toId: 17, - type: 1, - }, - { - id: 549, - fromId: 36, - toId: 37, - type: 1, - }, - { - id: 550, - fromId: 37, - toId: 38, - type: 1, - }, - { - id: 553, - fromId: 18, - toId: 20, - type: 1, - }, - { - id: 554, - fromId: 20, - toId: 39, - type: 1, - }, - { - id: 555, - fromId: 19, - toId: 39, - type: 1, - }, - { - id: 556, - fromId: 39, - toId: 22, - type: 1, - }, - { - id: 888, - fromId: 29, - toId: 28, - type: 3, - }, - { - id: 777, - fromId: 7, - toId: 11, - type: 2, - }, - ]; - \ No newline at end of file diff --git a/docs/knowledge-base/examples/gantt/scroll-to-today/main.jsx b/docs/knowledge-base/examples/gantt/scroll-to-today/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/gantt/scroll-to-today/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/add-new-column/ColumnForm.jsx b/docs/knowledge-base/examples/grid/add-new-column/ColumnForm.jsx deleted file mode 100644 index fce1e5a2..00000000 --- a/docs/knowledge-base/examples/grid/add-new-column/ColumnForm.jsx +++ /dev/null @@ -1,46 +0,0 @@ -import * as React from "react"; -import { Dialog } from "@progress/kendo-react-dialogs"; -import { Form, Field, FormElement } from "@progress/kendo-react-form"; -import { Input } from "@progress/kendo-react-inputs"; -import { Button } from '@progress/kendo-react-buttons'; - -const ColumnForm = props => { - return ( - - ( - -
-
- -
-
-
- - -
-
- )} - /> -
- ); -}; - -export default ColumnForm; diff --git a/docs/knowledge-base/examples/grid/add-new-column/app.jsx b/docs/knowledge-base/examples/grid/add-new-column/app.jsx deleted file mode 100644 index 5ae0be0d..00000000 --- a/docs/knowledge-base/examples/grid/add-new-column/app.jsx +++ /dev/null @@ -1,161 +0,0 @@ -import React, { useState } from 'react'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { Button } from '@progress/kendo-react-buttons'; -import ColumnForm from './ColumnForm.jsx'; - -import products from './shared-products.json'; - -const App = () => { - const columns = Object.keys(products[0]); - const columnsToIgnore = [ - 'Category', - 'ReorderLevel', - 'SupplierID', - 'CategoryID', - 'QuantityPerUnit', - 'UnitPrice', - 'UnitsOnOrder', - ]; - - const [state, setState] = useState({ - columns: [...columns], - openForm: false, - data: [...products], - editID: null, - }); - - const toggleDialog = () => { - setState((prev) => ({ ...prev, openForm: !prev.openForm })); - }; - - const addNewColumn = () => { - setState((prev) => ({ ...prev, openForm: true })); - }; - - const handleSubmit = (event) => { - const str = Object.values(event)[0]; - const columnName = str.replace(/\s+/g, ''); - - setState((prev) => ({ - data: prev.data.map((item) => { - item[columnName] = 'add value please'; - return item; - }), - columns: [...prev.columns, columnName], - openForm: false, - })); - }; - - const handleCancelEdit = () => { - setState((prev) => ({ ...prev, openForm: false })); - }; - - const rowClick = (event) => { - setState((prev) => ({ ...prev, editID: event.dataItem.ProductID })); - }; - - const itemChange = (event) => { - const inEditID = event.dataItem.ProductID; - const updatedData = state.data.map((item) => - item.ProductID === inEditID - ? { ...item, [event.field]: event.value } - : item - ); - - setState((prev) => ({ ...prev, data: updatedData })); - }; - - const closeEdit = (event) => { - if (event.target === event.currentTarget) { - setState((prev) => ({ ...prev, editID: null })); - } - }; - - const addRecord = () => { - const newRecord = { ProductID: state.data.length + 1 }; - - setState((prev) => ({ - ...prev, - data: [newRecord, ...prev.data], - editID: newRecord.ProductID, - })); - }; - - return ( - <> - ({ - ...item, - inEdit: item.ProductID === state.editID, - }))} - editField="inEdit" - onRowClick={rowClick} - onItemChange={itemChange} - > - -
- - -
-
- {state.columns.map((c) => { - let width = 'wrap'; - let field = c; - let title = c; - let editable = true; - let editor; - - if (columnsToIgnore.includes(c)) { - return null; - } - if (c === 'ProductID') { - width = '40px'; - title = 'ID'; - editable = false; - } - if (c === 'UnitsInStock') { - editor = 'numeric'; - } - - if (c === 'Discontinued') { - editor = 'boolean'; - } - - return ( - - ); - })} -
- {state.openForm && ( - - )} - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/add-new-column/main.jsx b/docs/knowledge-base/examples/grid/add-new-column/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/add-new-column/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/app.jsx b/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/app.jsx deleted file mode 100644 index 66b0cd89..00000000 --- a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/app.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { filterBy } from '@progress/kendo-data-query'; -import { InputFilterCell } from './inputFilterCell'; -import { sampleProducts } from './sample-products'; -const categories = Array.from( - new Set( - sampleProducts.map((p) => (p.Category ? p.Category.CategoryName : '')) - ) -); -const CategoryFilterCell = (props) => ( - -); -const App = () => { - const [data, setData] = React.useState(sampleProducts); - const [filter, setFilter] = React.useState(); - const filterChange = (event) => { - setData(filterBy(sampleProducts, event.filter)); - setFilter(event.filter); - }; - return ( - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/inputFilterCell.jsx b/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/inputFilterCell.jsx deleted file mode 100644 index 1159a892..00000000 --- a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/inputFilterCell.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import * as React from 'react'; -import { DropDownList } from '@progress/kendo-react-dropdowns'; -import { Input } from '@progress/kendo-react-inputs'; -import { Button } from '@progress/kendo-react-buttons'; -import { filterIcon } from '@progress/kendo-svg-icons'; -export const InputFilterCell = (props) => { - let hasValue = (value) => Boolean(value && value !== props.defaultItem); - const onChange = (event) => { - hasValue = hasValue(event.target.value); - props.onChange({ - value: hasValue ? event.target.value : '', - operator: hasValue ? (props.operator ? props.operator : 'contains') : '', - syntheticEvent: event.syntheticEvent, - }); - }; - const onClearButtonClick = (event) => { - event.preventDefault(); - props.onChange({ - value: '', - operator: '', - syntheticEvent: event, - }); - }; - - const onOperatorChange = (event) => { - hasValue = hasValue(props.value); - props.onChange({ - value: props.value, - operator: event.value.operator, - syntheticEvent: event.syntheticEvent, - }); - }; - return ( -
- -
- ); -}; diff --git a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/main.jsx b/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/sample-products.jsx b/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/sample-products.jsx deleted file mode 100644 index e06a78e4..00000000 --- a/docs/knowledge-base/examples/grid/add-operators-dropdown-for-custom-filtercell/sample-products.jsx +++ /dev/null @@ -1,171 +0,0 @@ -export const sampleProducts = [{ - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - }]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/auto-width/calculate-size/app.jsx b/docs/knowledge-base/examples/grid/auto-width/calculate-size/app.jsx deleted file mode 100644 index 0d7a648e..00000000 --- a/docs/knowledge-base/examples/grid/auto-width/calculate-size/app.jsx +++ /dev/null @@ -1,51 +0,0 @@ - -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import calculateSize from 'calculate-size'; - -import products from './shared-products.json'; - -class App extends React.Component { - state = { - gridData: products - } - - calculateWidth = (field) => { - let maxWidth = 0; - this.state.gridData.forEach(item => { - const size = calculateSize(item[field], { - font: 'Arial', - fontSize: '16px' - }) // pass the font properties based on the application - if(size.width > maxWidth) { - maxWidth = size.width - } - }) - return maxWidth - } - - render() { - return ( -
- - - - - - - ( - - - - )} /> - -
- ); - } -} - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/auto-width/calculate-size/main.jsx b/docs/knowledge-base/examples/grid/auto-width/calculate-size/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/auto-width/calculate-size/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/auto-width/canvas/app.jsx b/docs/knowledge-base/examples/grid/auto-width/canvas/app.jsx deleted file mode 100644 index 785345a9..00000000 --- a/docs/knowledge-base/examples/grid/auto-width/canvas/app.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn } from '@progress/kendo-react-grid'; - -import products from './shared-products.json'; - -const App = () => { - const calculateWidth = (field) => { - let maxWidth = 0; - products.forEach((item) => { - const size = getTextWidth(item[field], 'normal 14px sans-serif') + 12; - if (size > maxWidth) { - maxWidth = size; - } - }); - return maxWidth; - }; - - function getTextWidth(text, font) { - const canvas = - getTextWidth.canvas || - (getTextWidth.canvas = document.createElement('canvas')); - const context = canvas.getContext('2d'); - context.font = font; - const metrics = context.measureText(text); - return metrics.width; - } - - return ( - - - - - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/auto-width/canvas/main.jsx b/docs/knowledge-base/examples/grid/auto-width/canvas/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/auto-width/canvas/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/app.jsx b/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/app.jsx deleted file mode 100644 index ccbe2af3..00000000 --- a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/app.jsx +++ /dev/null @@ -1,117 +0,0 @@ -import * as React from 'react'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { sampleProducts } from './sample-products'; -import { CellRender, RowRender } from './renderers'; -const EDIT_FIELD = 'inEdit'; - -const App = () => { - const [data, setData] = React.useState(sampleProducts); - const [changes, setChanges] = React.useState(false); - - const enterEdit = (dataItem, field) => { - const newData = data.map((item) => ({ - ...item, - [EDIT_FIELD]: item.ProductID === dataItem.ProductID ? field : undefined, - })); - setData(newData); - }; - - const exitEdit = () => { - const newData = data.map((item) => ({ ...item, [EDIT_FIELD]: undefined })); - setData(newData); - }; - - const saveChanges = () => { - sampleProducts.splice(0, sampleProducts.length, ...data); - setChanges(false); - }; - - const cancelChanges = () => { - setData(sampleProducts); - setChanges(false); - }; - - const itemChange = (event) => { - let field = event.field || ''; - event.dataItem[field] = event.value; - let newData = data.map((item) => { - if (item.ProductID === event.dataItem.ProductID) { - item[field] = event.value; - } - - return item; - }); - setData(newData); - setChanges(true); - }; - - const customCellRender = (td, props) => ( - - ); - - const customRowRender = (tr, props) => ( - - ); - - return ( - - - - - - - - - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/main.jsx b/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/renderers.jsx b/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/renderers.jsx deleted file mode 100644 index eb732737..00000000 --- a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/renderers.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from 'react'; -export const CellRender = (props) => { - const dataItem = props.originalProps.dataItem; - const cellField = props.originalProps.field; - const inEditField = dataItem[props.editField || '']; - const additionalProps = - cellField && cellField === inEditField - ? { - ref: (td) => { - const input = td && td.querySelector('input'); - const activeElement = document.activeElement; - - if ( - !input || - !activeElement || - input === activeElement || - !activeElement.contains(input) - ) { - return; - } - - if (input.type === 'checkbox') { - input.focus(); - } else { - input.select(); - } - }, - } - : { - onKeyDown: () => { - addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - props.enterEdit(dataItem, cellField); - } - }); - }, - }; - const clonedProps = { ...props.td.props, ...additionalProps }; - return React.cloneElement(props.td, clonedProps, props.td.props.children); -}; -export const RowRender = (props) => { - const trProps = { - ...props.tr.props, - onBlur: () => { - props.exitEdit(); - }, - }; - return React.cloneElement(props.tr, { ...trProps }, props.tr.props.children); -}; diff --git a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/sample-products.jsx b/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/sample-products.jsx deleted file mode 100644 index 14658432..00000000 --- a/docs/knowledge-base/examples/grid/cell-edit-on-enter-press/sample-products.jsx +++ /dev/null @@ -1,171 +0,0 @@ -export const sampleProducts = [{ - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - }]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/ExtendedGridCell.jsx b/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/ExtendedGridCell.jsx deleted file mode 100644 index df56b4fd..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/ExtendedGridCell.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import * as React from 'react'; -import { useInternationalization } from '@progress/kendo-react-intl'; -import { useTableKeyboardNavigation } from '@progress/kendo-react-data-tools'; -import { - GRID_COL_INDEX_ATTRIBUTE, -} from '@progress/kendo-react-grid'; -import { classNames } from '@progress/kendo-react-common'; - -function getNestedValue(fieldName, dataItem) { - const path = (fieldName || '').split('.'); - let data = dataItem; - path.forEach((p) => { - data = data ? data[p] : undefined; - }); - - return data; -} - -export const ExtendedGridCell = (props) => { - let defaultRendering = null; - const intl = useInternationalization(); - const navigationAttributes = useTableKeyboardNavigation(props.id); - - const onContextMenu = React.useCallback( - (event) => { - if (props.onContextMenu) { - props.onContextMenu.call(undefined, event, props.dataItem, props.field); - } - }, - [props.onContextMenu, props.dataItem, props.field] - ); - let tdProps = null; - let content = props.content; - if (props.rowType === 'groupFooter') { - tdProps = { - onContextMenu: onContextMenu, - className: props.className, - }; - defaultRendering = ; - } else if (props.field !== undefined && props.rowType !== 'groupHeader') { - const data = getNestedValue(props.field, props.dataItem); - - if (!content && data !== undefined && data !== null) { - content = props.format - ? intl.format(props.format, data) - : data.toString(); - } - - const className = classNames('k-table-td', props.className, { - 'k-selected': props.isSelected, - }); - - tdProps = { - onContextMenu: onContextMenu, - colSpan: props.colSpan, - style: props.style, - className: className, - role: 'gridcell', - 'aria-colindex': props.ariaColumnIndex, - 'aria-selected': props.isSelected, - [GRID_COL_INDEX_ATTRIBUTE]: props.columnIndex, - ...navigationAttributes, - }; - - defaultRendering = {content}; - } - - const rowTypeSetting = props.rowType || 'data'; - const customCells = props.cells; - if (customCells && customCells[rowTypeSetting]) { - const CustomCell = customCells[rowTypeSetting]; - return ( - - {content} - - ); - } - - return props.render - ? props.render.call(undefined, defaultRendering, props) - : defaultRendering; -}; diff --git a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/app.jsx b/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/app.jsx deleted file mode 100644 index 2abd03b5..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/app.jsx +++ /dev/null @@ -1,120 +0,0 @@ -import * as React from 'react'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { sampleProducts } from './sample-products'; -import { Checkbox } from '@progress/kendo-react-inputs'; -import { ExtendedGridCell } from './ExtendedGridCell'; - -//Custom cell for displaying disabled Checkbox in view mode of the cell -const booleanCell = (props) => { - const { dataItem } = props; - let content = null; - //Enabled Checkbox is rendered if the row is in edit mode - if (dataItem.inEdit) { - content = ( - { - props.onChange({ - dataItem: props.dataItem, - field: props.field, - syntheticEvent: e.syntheticEvent, - value: e.target.value, - }); - }} - > - ); - } else { - //Disabled Checkbox for view mode - content = ( - - ); - } - - //ExtendedGridCell re-uses the default rendering of the cells (keeping all class names, attributes, etc.), but allows passing custom content. - return ; -}; - -const App = () => { - const [data, setData] = React.useState(sampleProducts); - const [editID, setEditID] = React.useState(null); - - const rowClick = (event) => { - setEditID(event.dataItem.ProductID); - }; - - const itemChange = (event) => { - const inEditID = event.dataItem.ProductID; - const field = event.field || ''; - const newData = data.map((item) => - item.ProductID === inEditID ? { ...item, [field]: event.value } : item - ); - setData(newData); - }; - - const closeEdit = (event) => { - if (event.target === event.currentTarget) { - setEditID(null); - } - }; - - const addRecord = () => { - const newRecord = { - ProductID: data.length + 1, - }; - setData([newRecord, ...data]); - setEditID(newRecord.ProductID); - }; - - return ( - ({ - ...item, - inEdit: item.ProductID === editID, - }))} - editField="inEdit" - onRowClick={rowClick} - onItemChange={itemChange} - > - -
- -
-
- - - - - -
- ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/main.jsx b/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/sample-products.jsx b/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/sample-products.jsx deleted file mode 100644 index e06a78e4..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-in-view-mode-for-boolean/sample-products.jsx +++ /dev/null @@ -1,171 +0,0 @@ -export const sampleProducts = [{ - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - }]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-selection-server-side/app.jsx b/docs/knowledge-base/examples/grid/checkbox-selection-server-side/app.jsx deleted file mode 100644 index 323d6cbd..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-selection-server-side/app.jsx +++ /dev/null @@ -1,107 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { ProductsLoader } from './products-loader.jsx'; - -class App extends React.Component { - constructor(props) { - super(props); - this.state = { - products: { data: [], total: 0 }, - dataState: { take: 10, skip: 0 }, - selectedIds: [] - }; - } - - dataStateChange = (e) => { - this.setState({ - ...this.state, - dataState: e.data - }); - } - - selectionChange = (event) => { - if (!event.dataItem.selected) { - let ids = this.state.selectedIds - if (ids.indexOf(event.dataItem.ProductID) === -1) { - ids.push(event.dataItem.ProductID) - } - this.setState({ selectedIds: ids }) - } else { - let ids = this.state.selectedIds - let index = ids.indexOf(event.dataItem.ProductID) - ids.splice(index, 1) - this.setState({ selectedIds: ids }) - } - } - - headerSelectionChange = (event) => { - const checked = event.syntheticEvent.target.checked; - if (checked) { - let ids = this.state.selectedIds - this.state.products.data.forEach(item => { - if (ids.indexOf(item.ProductID) === -1) { - ids.push(item.ProductID) - } - }) - this.setState({ selectedIds: ids }) - } else { - let ids = this.state.selectedIds - this.state.products.data.forEach(item => { - let index = ids.indexOf(item.ProductID) - ids.splice(index, 1) - }) - this.setState({ selectedIds: ids }) - } - } - - dataRecieved = (products) => { - let data = products.data.map(dataItem => Object.assign({ selected: false }, dataItem)) - this.setState({ - ...this.state, - products: products - }); - } - - render() { - return ( -
- { - if (this.state.selectedIds.indexOf(item.ProductID) >= 0) { - item.selected = true - } else { - item.selected = false - } - return item - })} - onDataStateChange={this.dataStateChange} - > - dataItem.selected === false) === -1 - } /> - - - - - - - -
- ); - } -} - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-selection-server-side/main.jsx b/docs/knowledge-base/examples/grid/checkbox-selection-server-side/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-selection-server-side/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-selection-server-side/products-loader.jsx b/docs/knowledge-base/examples/grid/checkbox-selection-server-side/products-loader.jsx deleted file mode 100644 index 1e44908f..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-selection-server-side/products-loader.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import * as React from 'react'; - -import { toODataString } from '@progress/kendo-data-query'; - -export class ProductsLoader extends React.Component { - baseUrl = 'https://demos.telerik.com/kendo-ui/service-v4/odata/Products?$count=true&'; - init = { method: 'GET', accept: 'application/json', headers: {} }; - - lastSuccess = ''; - pending = ''; - - requestDataIfNeeded = () => { - if (this.pending || toODataString(this.props.dataState) === this.lastSuccess) { - return; - } - this.pending = toODataString(this.props.dataState); - fetch(this.baseUrl + this.pending, this.init) - .then(response => response.json()) - .then(json => { - this.lastSuccess = this.pending; - this.pending = ''; - if (toODataString(this.props.dataState) === this.lastSuccess) { - this.props.onDataRecieved.call(undefined, { - data: json.value, - total: json['@odata.count'] - }); - } else { - this.requestDataIfNeeded(); - } - }); - } - - render() { - this.requestDataIfNeeded(); - return this.pending && ; - } -} - - -class LoadingPanel extends React.Component { - render() { - const loadingPanel = ( -
- Loading -
-
-
- ); - - const gridContent = document && document.querySelector('.k-grid-content'); - return gridContent ? ReactDOM.createPortal(loadingPanel, gridContent) : loadingPanel; - } -} - diff --git a/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/app.jsx b/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/app.jsx deleted file mode 100644 index 246b3d11..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/app.jsx +++ /dev/null @@ -1,205 +0,0 @@ -import * as React from 'react'; -import { getter } from '@progress/kendo-react-common'; -import { process } from '@progress/kendo-data-query'; -import { - Grid, - GridColumn as Column, - GridToolbar, - getSelectedState, -} from '@progress/kendo-react-grid'; -import { - setGroupIds, - getGroupIds, - setExpandedState, -} from '@progress/kendo-react-data-tools'; - -import products from './products.json'; - -const initialDataState = { - take: 10, - skip: 0, - group: [ - { field: 'UnitsInStock' }, - { field: 'ProductName' }, - { field: 'UnitPrice' }, - ], -}; - -const processWithGroups = (data, dataState) => { - const newDataState = process(data, dataState); - - setGroupIds({ data: newDataState.data, group: dataState.group }); - - return newDataState; -}; - -const App = () => { - const idGetter = getter('ProductID'); - const [currentSelectedState, setCurrentSelectedState] = React.useState({}); - const [dataState, setDataState] = React.useState(initialDataState); - const [resultState, setResultState] = React.useState( - processWithGroups( - products.map((item) => ({ - ...item, - ['selected']: currentSelectedState[idGetter(item)], - })), - initialDataState - ) - ); - const [collapsedState, setCollapsedState] = React.useState([]); - - const onDataStateChange = React.useCallback((event) => { - const newDataState = processWithGroups( - products.map((item) => ({ - ...item, - ['selected']: currentSelectedState[idGetter(item)], - })), - event.dataState - ); - - setDataState(event.dataState); - setResultState(newDataState); - }, []); - - const onExpandChange = React.useCallback( - (event) => { - const item = event.dataItem; - - if (item.groupId) { - const collapsedIds = !event.value - ? [...collapsedState, item.groupId] - : collapsedState.filter((groupId) => groupId !== item.groupId); - setCollapsedState(collapsedIds); - } - }, - [collapsedState] - ); - - const onGroupsToggle = React.useCallback(() => { - const dataStateWithoutPaging = processWithGroups( - products.map((item) => ({ - ...item, - ['selected']: currentSelectedState[idGetter(item)], - })), - { - group: dataState.group, - } - ); - - setCollapsedState( - collapsedState.length - ? [] - : getGroupIds({ data: dataStateWithoutPaging.data }) - ); - }, [collapsedState, dataState]); - - const setSelectedValue = (data) => { - let newData = data.map((item) => { - if (item.items) { - return { - ...item, - items: setSelectedValue(item.items), - }; - } else { - return { - ...item, - ['selected']: currentSelectedState[idGetter(item)], - }; - } - }); - return newData; - }; - - const newData = setExpandedState({ - data: setSelectedValue(resultState.data), - collapsedIds: collapsedState, - }); - - const onHeaderSelectionChange = React.useCallback((event) => { - const checkboxElement = event.syntheticEvent.target; - const checked = checkboxElement.checked; - const newSelectedState = {}; - event.dataItems.forEach((item) => { - newSelectedState[idGetter(item)] = checked; - }); - setCurrentSelectedState(newSelectedState); - }, []); - - const onSelectionChange = React.useCallback( - (event) => { - const newSelectedState = getSelectedState({ - event, - selectedState: currentSelectedState, - dataItemKey: 'ProductID', - }); - setCurrentSelectedState(newSelectedState); - }, - [currentSelectedState] - ); - const getNumberOfItems = (data) => { - let count = 0; - data.forEach((item) => { - if (item.items) { - if (item.expanded) { - count = count + getNumberOfItems(item.items); - } - } else { - count++; - } - }); - return count; - }; - const getNumberOfSelectedItems = (data) => { - let count = 0; - data.forEach((item) => { - console.log(item); - if (item.items) { - if (item.expanded) { - count = count + getNumberOfSelectedItems(item.items); - } - } else { - count = count + (item.selected == true ? 1 : 0); - } - }); - return count; - }; - const checkHeaderSelectionValue = () => { - let selectedItems = getNumberOfSelectedItems(newData); - return newData.length > 0 && selectedItems == getNumberOfItems(newData); - }; - return ( - - - - - - - - - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/main.jsx b/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/products.json b/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/checkbox-selection-with-grouping/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/app.jsx b/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/app.jsx deleted file mode 100644 index cd31d55f..00000000 --- a/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/app.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import * as React from 'react'; - -import { GridColumnMenuCheckboxFilter } from '@progress/kendo-react-grid'; -import { Popup } from '@progress/kendo-react-popup'; -import products from './shared-products.json'; - - -const CheckboxListMenu = (props) => { - const anchor = React.useRef(null); - const [show, setShow] = React.useState(false); - const [currentFilter, setCurrentFilter] = React.useState(); - React.useEffect(() => { - setShow(true); - }, []); - const onClick = () => { - setShow(!show); - }; - const onCloseMenu = () => { - setShow(false); - }; - - const onFilterChange = (ev) => { - setCurrentFilter(ev); - props.onFilterChange(ev); - }; - return ( -
- - - - -
- ); -}; - -const App = () => { - const onFilterChange = (filter) => { - console.log(filter); - }; - return ( -
-
- { - - } -
-
- ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/columnMenu.jsx b/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/columnMenu.jsx deleted file mode 100644 index 467218ee..00000000 --- a/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/columnMenu.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; -import { GridColumnMenuCheckboxFilter } from '@progress/kendo-react-grid'; -import products from './products.json'; -export const ColumnMenu = (props) => { - return ( -
- null} - /> -
- ); -}; diff --git a/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/main.jsx b/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/checkboxfilter-outside-grid/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/collapse-header-column/app.jsx b/docs/knowledge-base/examples/grid/collapse-header-column/app.jsx deleted file mode 100644 index e561d66c..00000000 --- a/docs/knowledge-base/examples/grid/collapse-header-column/app.jsx +++ /dev/null @@ -1,74 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import products from './products.json'; - -const App = () => { - const [expandedColumnsState, setExpandedColumnsState] = React.useState({ - 'Product Information': true, - Category: true, - }); - - const CollapsableHeaderCell = React.useCallback( - (props) => { - let currentState = expandedColumnsState[props.title]; - const onClick = (ev) => { - let newState = { ...expandedColumnsState }; - newState[props.title] = !currentState; - ev.preventDefault(); - setExpandedColumnsState(newState); - }; - return ( -
- {props.title} - -
- ); - }, - [expandedColumnsState, setExpandedColumnsState] - ); - return ( - - - - {expandedColumnsState['Product Information'] != true ? ( - <> - - - - - - - ) : ( - - )} - - , - ]} - /> - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/collapse-header-column/grid-collapse-header-columns.gif b/docs/knowledge-base/examples/grid/collapse-header-column/grid-collapse-header-columns.gif deleted file mode 100644 index 81f20c02..00000000 Binary files a/docs/knowledge-base/examples/grid/collapse-header-column/grid-collapse-header-columns.gif and /dev/null differ diff --git a/docs/knowledge-base/examples/grid/collapse-header-column/main.jsx b/docs/knowledge-base/examples/grid/collapse-header-column/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/collapse-header-column/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/collapse-header-column/products.json b/docs/knowledge-base/examples/grid/collapse-header-column/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/collapse-header-column/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/app.jsx b/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/app.jsx deleted file mode 100644 index 435f71a1..00000000 --- a/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/app.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import * as React from 'react'; -import { process } from '@progress/kendo-data-query'; -import { - Grid, GridColumn as Column -} from '@progress/kendo-react-grid'; - -import { CustomFilterUI } from './customFilterUI.jsx'; -import { - GridColumnMenuFilter -} from '@progress/kendo-react-grid'; - -import products from './shared-products.json'; - -class App extends React.Component { - constructor(props) { - super(props); - - const dataState = this.createDataState({ - take: 8, - skip: 0 - }); - - this.state = { - ...dataState - }; - } - - createDataState(dataState) { - return { - result: process(products.slice(0), dataState), - dataState: dataState - }; - } - - dataStateChange = (event) => { - this.setState(this.createDataState(event.dataState)); - } - - render() { - return ( -
- - - () - }/> - - -
-
- ); - } -} - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/customFilterUI.jsx b/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/customFilterUI.jsx deleted file mode 100644 index dca1f101..00000000 --- a/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/customFilterUI.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import * as React from 'react'; -import { AutoComplete, DropDownList } from '@progress/kendo-react-dropdowns'; -import products from './shared-products.json'; - - -export const CustomFilterUI = (props) => { - const operators = props.firstFilterProps.operators - const logic = props.logicData - - const productNames = products.map(item => { - return item.ProductName - }) - - const [state, setState] = React.useState({ - first: operators[0], - second: operators[1] - }) - - - const handleChange = (event) => { - const value = event.target.value - const name = event.target.name - - const { firstFilterProps } = props; - const { secondFilterProps } = props; - - if (name === "firstFilter") { - firstFilterProps.onChange({ - value, - operator: state.first.operator, - syntheticEvent: event.syntheticEvent - }) - } - if (name === "secondFilter") { - secondFilterProps.onChange({ - value, - operator: state.second.operator, - syntheticEvent: event.syntheticEvent - }) - } - - if (name === "logic") { - props.onLogicChange(event) - } - } - - return ( -
- setState({...state, first: event.target.value})} - /> - - - setState({...state, second: event.target.value})} - /> - -
- ); -} diff --git a/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/main.jsx b/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/columnmenufilter-with-autocomplete/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/context-menu/app.jsx b/docs/knowledge-base/examples/grid/context-menu/app.jsx deleted file mode 100644 index e5d225a4..00000000 --- a/docs/knowledge-base/examples/grid/context-menu/app.jsx +++ /dev/null @@ -1,142 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { Popup } from '@progress/kendo-react-popup'; -import { Menu, MenuItem } from '@progress/kendo-react-layout'; - -import products from './shared-products.json'; - -class App extends React.Component { - state = { - gridData: products, - open: false - }; - - blurTimeoutRef; - menuWrapperRef; - - rowRender = (trElement, dataItem) => { - const trProps = { - ...trElement.props, - onContextMenu: (e) => { - e.preventDefault(); - this.handleContextMenuOpen(e, dataItem.dataItem); - } - }; - return React.cloneElement(trElement, { ...trProps }, trElement.props.children); - } - - handleContextMenuOpen = (e, dataItem) => { - this.dataItem = dataItem; - this.dataItemIndex = this.state.gridData.findIndex(p => (p.ProductID === this.dataItem.ProductID)); - this.offset = { left: e.clientX, top: e.clientY }; - this.setState({ - open: true - }); - } - - handleMoveUp = () => { - let data = [...this.state.gridData]; - if (this.dataItemIndex !== 0) { - data.splice(this.dataItemIndex, 1); - data.splice(this.dataItemIndex - 1, 0, this.dataItem); - this.setState({ gridData: data }); - } - } - - handleMoveDown = () => { - let data = [...this.state.gridData]; - if (this.dataItemIndex < this.state.gridData.length) { - data.splice(this.dataItemIndex, 1); - data.splice(this.dataItemIndex + 1, 0, this.dataItem); - this.setState({ gridData: data }); - } - } - - handleDelete = () => { - let data = [...this.state.gridData]; - data.splice(this.dataItemIndex, 1); - this.setState({ - gridData: data - }); - } - - handleOnSelect = (e) => { - switch (e.item.text) { - case "Move Up": - this.handleMoveUp(); - break; - case "Move Down": - this.handleMoveDown(); - break; - case "Delete": - this.handleDelete(); - break; - default: - } - this.setState({ - open: false - }) - } - - onFocusHandler = () => { - clearTimeout(this.blurTimeoutRef); - this.blurTimeoutRef = undefined; - }; - - onBlurTimeout = () => { - this.setState({ - open: false - }); - - this.blurTimeoutRef = undefined; - }; - - onBlurHandler = event => { - clearTimeout(this.blurTimeoutRef); - this.blurTimeoutRef = setTimeout(this.onBlurTimeout); - }; - - onPopupOpen = () => { - this.menuWrapperRef.querySelector('[tabindex]').focus(); - }; - - render() { - return ( -
- -
(this.menuWrapperRef = el)} - > - - - - - -
-
- - - - - - - -
- ); - } -} - -export default App; - diff --git a/docs/knowledge-base/examples/grid/context-menu/main.jsx b/docs/knowledge-base/examples/grid/context-menu/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/context-menu/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/custom-expand-collapse-column/app.jsx b/docs/knowledge-base/examples/grid/custom-expand-collapse-column/app.jsx deleted file mode 100644 index 38f78d6a..00000000 --- a/docs/knowledge-base/examples/grid/custom-expand-collapse-column/app.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import products from './shared-products.json'; -import { IconWrap } from '@progress/kendo-react-common'; -import { minusIcon, plusIcon } from '@progress/kendo-svg-icons'; -const DetailComponent = (props) => { - const dataItem = props.dataItem; - return ( -

- In Stock: {dataItem.UnitsInStock} units -

- ); -}; - -const expandCell = (props) => { - console.log(props); - return ( - - { - e.preventDefault(); - if (props.onChange) { - props.onChange({ - dataItem: props.dataItem, - dataIndex: props.dataIndex, - syntheticEvent: e, - field: 'expanded_custom', - value: !props.dataItem['expanded'], - }); - } - }} - href="#" - tabIndex={-1} - > - - - - ); -}; -const App = () => { - const [data, setData] = React.useState(products); - const onItemChange = (event) => { - //This is for the expand only - if (event.field == 'expanded_custom') { - let newData = data.map((item) => { - if (item.ProductID === event.dataItem.ProductID) { - item.expanded = !event.dataItem.expanded; - } - - return item; - }); - setData(newData); - } - - //Add standard onItemChange here - }; - return ( - - - - - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/custom-expand-collapse-column/main.jsx b/docs/knowledge-base/examples/grid/custom-expand-collapse-column/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/custom-expand-collapse-column/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/custom-header-cell-with-sorting-and-columnmenu/app.jsx b/docs/knowledge-base/examples/grid/custom-header-cell-with-sorting-and-columnmenu/app.jsx deleted file mode 100644 index 517cf6d5..00000000 --- a/docs/knowledge-base/examples/grid/custom-header-cell-with-sorting-and-columnmenu/app.jsx +++ /dev/null @@ -1,88 +0,0 @@ -import * as React from 'react'; -import { process } from '@progress/kendo-data-query'; -import { - Grid, - GridColumn as Column, - GridColumnMenuWrapper, -} from '@progress/kendo-react-grid'; -import { - GridColumnMenuSort, - GridColumnMenuFilter, - GridColumnMenuGroup, -} from '@progress/kendo-react-grid'; - -const products = [ - { ProductName: 'Name', ProductID: 1, UnitPrice: 5, Discontinued: true }, -]; - -const ColumnMenu = (props) => { - return ( -
- - - -
- ); -}; - -const customHeaderCell = (props) => { - return ( - <> - - - {props.field}{' '} - {props.children} - - - - - ); -}; -const createDataState = (dataState) => { - return { - result: process(products.slice(0), dataState), - dataState: dataState, - }; -}; - -const App = () => { - let initialState = createDataState({ - take: 8, - skip: 0, - }); - const [result, setResult] = React.useState(initialState.result); - const [dataState, setDataState] = React.useState(initialState.dataState); - - const dataStateChange = (event) => { - let updatedState = createDataState(event.dataState); - setResult(updatedState.result); - setDataState(updatedState.dataState); - }; - - return ( - - - - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/custom-header-cell-with-sorting-and-columnmenu/main.jsx b/docs/knowledge-base/examples/grid/custom-header-cell-with-sorting-and-columnmenu/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/custom-header-cell-with-sorting-and-columnmenu/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/date-range-filter/app.jsx b/docs/knowledge-base/examples/grid/date-range-filter/app.jsx deleted file mode 100644 index 81f59a1f..00000000 --- a/docs/knowledge-base/examples/grid/date-range-filter/app.jsx +++ /dev/null @@ -1,140 +0,0 @@ -import React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { filterBy } from '@progress/kendo-data-query'; -import { DatePicker } from '@progress/kendo-react-dateinputs'; -import { Button } from '@progress/kendo-react-buttons'; - -import { sampleProducts } from './shared-sample-products'; - -const defaultValue = new Date(1996, 8, 19); - -class App extends React.Component { - constructor(props) { - super(props); - - const defaultFilter = { - logic: 'and', - filters: [ - { - field: 'FirstOrderedOn', - operator: 'gte', - value: defaultValue, - }, - ], - }; - - this.state = { - data: sampleProducts.slice(), - filter: defaultFilter, - }; - } - - filterChange = (event) => { - this.setState({ filter: event.filter }); - }; - - handleClearDateFilter = () => { - let currentFilters = { ...this.state.filter }; - let newFilter = currentFilters.filters.filter((filter) => { - return filter.field !== 'FirstOrderedOn'; - }); - currentFilters.filters = newFilter; - this.minDateFilter = null; - this.maxDateFilter = null; - this.setState({ filter: currentFilters }); - }; - - handleDateFilterChange = (event) => { - let currentFilters = { ...this.state.filter }; - if (event.operator === 'gt') { - this.minDateFilter = event.value; - } else { - this.maxDateFilter = event.value; - } - if (currentFilters.filters) { - let newFilter = currentFilters.filters.filter((filter) => { - return !( - filter.field === 'FirstOrderedOn' && - filter.operator === event.operator - ); - }); - currentFilters.filters = newFilter; - currentFilters.filters.push({ - field: 'FirstOrderedOn', - operator: event.operator, - value: event.value, - }); - } else { - currentFilters.filters = []; - currentFilters.logic = 'and'; - currentFilters.filters.push({ - field: 'FirstOrderedOn', - operator: event.operator, - value: event.value, - }); - } - this.setState({ filter: currentFilters }); - }; - - MyDateFilterCell = (props) => ( -
- { - this.handleDateFilterChange({ - value: e.target.value, - operator: 'gt', - }); - }} - /> - { - this.handleDateFilterChange({ - value: e.target.value, - operator: 'lt', - }); - }} - /> - -
- ); - - render() { - return ( - - - - - - - ); - } -} - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/date-range-filter/main.jsx b/docs/knowledge-base/examples/grid/date-range-filter/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/date-range-filter/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/app.jsx b/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/app.jsx deleted file mode 100644 index 77db3a6e..00000000 --- a/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/app.jsx +++ /dev/null @@ -1,103 +0,0 @@ -import * as React from 'react'; -import { - Grid, - GridColumn as Column, - getSelectedState, -} from '@progress/kendo-react-grid'; -import { getter } from '@progress/kendo-react-common'; -import products from './products.json'; -import { Checkbox } from '@progress/kendo-react-inputs'; -const DATA_ITEM_KEY = 'ProductID'; -const SELECTED_FIELD = 'selected'; -const idGetter = getter(DATA_ITEM_KEY); - -const ConditionalCellRender = (td, props) => { - if (props.field == SELECTED_FIELD && props.dataItem.UnitsInStock < 20) { - return ( - - - - ); - } else { - return td; - } -}; - -const App = () => { - const [dataState, setDataState] = React.useState( - products - .map((dataItem) => - Object.assign( - { - selected: false, - }, - dataItem - ) - ) - .slice(0, 5) - ); - const [selectedState, setSelectedState] = React.useState({}); - const onSelectionChange = React.useCallback( - (event) => { - const newSelectedState = getSelectedState({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }, - [selectedState] - ); - const onHeaderSelectionChange = React.useCallback((event) => { - const checkboxElement = event.syntheticEvent.target; - const checked = checkboxElement.checked; - const newSelectedState = {}; - event.dataItems.forEach((item) => { - if (item.UnitsInStock >= 20) { - newSelectedState[idGetter(item)] = checked; - } - }); - setSelectedState(newSelectedState); - }, []); - return ( -
- ({ - ...item, - [SELECTED_FIELD]: selectedState[idGetter(item)], - }))} - style={{ - height: '400px', - }} - dataItemKey={DATA_ITEM_KEY} - selectedField={SELECTED_FIELD} - selectable={{ - enabled: false, - drag: false, - cell: false, - mode: 'multiple', - }} - onSelectionChange={onSelectionChange} - onHeaderSelectionChange={onHeaderSelectionChange} - > - - item.UnitsInStock >= 20 && !selectedState[idGetter(item)] - ) === -1 - } - /> - - - - - -
- ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/main.jsx b/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/products.json b/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/disable-selection-for-rows-conditionally/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/drag-drop-between-grids/app.jsx b/docs/knowledge-base/examples/grid/drag-drop-between-grids/app.jsx deleted file mode 100644 index 37ae299f..00000000 --- a/docs/knowledge-base/examples/grid/drag-drop-between-grids/app.jsx +++ /dev/null @@ -1,102 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; - -import products from './shared-products.json'; - -const RowRender = (properties) => { - const {row, props, onDrop, onDragStart } = {...properties} - const additionalProps = { - onDragStart: (e) => onDragStart(e, props.dataItem), - onDragOver: (e) => { e.preventDefault(); }, - onDrop: (e) => onDrop(e), - draggable: true - }; - return React.cloneElement(row,{...row.props, ...additionalProps}, row.props.children) -} - -class App extends React.Component { - constructor(props) { - super(props); - this.state = { - gridData: products.slice(0, 30), - gridDataTwo: products.slice(31, 60), - dragFrom: '', - dragDataItem: null - }; - } - - handleOnDropOne = (e) => { - if(this.state.dragFrom === 'second'){ - let newDataSecond = this.state.gridDataTwo.filter(item => item.ProductID !== this.state.dragDataItem.ProductID); - let newDataFirst = [this.state.dragDataItem, ...this.state.gridData]; - this.setState({ - gridData: newDataFirst, - gridDataTwo: newDataSecond - }); - } - } - handleDragStartOne = (e, dataItem) => { - this.setState({ - dragFrom: "first", - dragDataItem: dataItem - }); - } - - handleOnDropTwo = (e) => { - if(this.state.dragFrom === 'first'){ - let newDataFirst = this.state.gridData.filter(item => item.ProductID !== this.state.dragDataItem.ProductID); - let newDataSecond = [this.state.dragDataItem, ...this.state.gridDataTwo]; - this.setState({ - gridData: newDataFirst, - gridDataTwo: newDataSecond - }); - } - } - handleDragStartTwo = (e, dataItem) => { - this.setState({ - dragFrom: "second", - dragDataItem: dataItem - }); - } - - rowForGridOne = (row, props) => { - return - } - - rowForGridTwo = (row, props) => { - return - } - - render() { - return ( - <> - - - - - - - -
- - - - - - - - - ); - } -} - -export default App; - diff --git a/docs/knowledge-base/examples/grid/drag-drop-between-grids/main.jsx b/docs/knowledge-base/examples/grid/drag-drop-between-grids/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/drag-drop-between-grids/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/app.jsx b/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/app.jsx deleted file mode 100644 index 58c5a513..00000000 --- a/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/app.jsx +++ /dev/null @@ -1,88 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { filterBy, process } from '@progress/kendo-data-query'; -import { DropdownFilterCell } from './dropdownFilterCell'; - -const sampleProducts = [ - { - ProductID: 1, - ProductName: 'Chai', - SupplierID: 1, - CategoryID: 1, - Countries: ['USA', 'India', 'UK'], - }, - { - ProductID: 2, - ProductName: 'Chang', - SupplierID: 1, - CategoryID: 1, - Countries: ['UK', 'India'], - }, -]; - -const countries = ['UK', 'India', 'USA']; - -const CategoryFilterCell = (props) => ( - -); - -const arrayOperator = (value, originalOperator, current) => { - if (value == '') return true; - let result = filterBy(current, { - logic: 'and', - filters: [{ operator: originalOperator, value: value, ignoreCase: true }], - }); - return result.length > 0; -}; - -const App = () => { - const [data, setData] = React.useState(sampleProducts); - const [dataState, setDataState] = React.useState({}); - - //Here we are replacing the default operator for the Countries filters with a custom one that will handle the array - const onDataStateChange = (event) => { - let newState = { ...event.dataState }; - if (event.dataState.filter) { - newState.filter = { ...event.dataState.filter }; - newState.filter.filters = newState.filter.filters.map((item) => { - if (item.field == 'Countries') { - let newItem = { ...item }; - let originalOperator = newItem.operator; - newItem.operator = arrayOperator.bind( - undefined, - item.value, - originalOperator - ); - return newItem; - } else { - return item; - } - }); - } - setDataState(newState); - }; - - return ( - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/dropdownFilterCell.jsx b/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/dropdownFilterCell.jsx deleted file mode 100644 index 01919a56..00000000 --- a/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/dropdownFilterCell.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import * as React from 'react'; -import { DropDownList } from '@progress/kendo-react-dropdowns'; -export const DropdownFilterCell = props => { - let hasValue = value => Boolean(value && value !== props.defaultItem); - - const onChange = event => { - hasValue = hasValue(event.target.value); - props.onChange({ - value: hasValue ? event.target.value : '', - operator: hasValue ? 'eq' : '', - syntheticEvent: event.syntheticEvent - }); - }; - - const onClearButtonClick = event => { - event.preventDefault(); - props.onChange({ - value: '', - operator: '', - syntheticEvent: event - }); - }; - - return
- - -
; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/main.jsx b/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/dropdown-filter-for-array-field/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/excel-export-header-footer/app.jsx b/docs/knowledge-base/examples/grid/excel-export-header-footer/app.jsx deleted file mode 100644 index 4d6ecad2..00000000 --- a/docs/knowledge-base/examples/grid/excel-export-header-footer/app.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import * as React from "react"; -import { Grid, GridColumn, GridToolbar } from "@progress/kendo-react-grid"; -import { ExcelExport } from "@progress/kendo-react-excel-export"; - -import products from "./shared-products.json"; - -class App extends React.Component { - _export; - export = () => { - const options = this._export.workbookOptions(); - const rows = options.sheets[0].rows; - options.sheets[0].frozenRows = 2; - const headerRow = { - height: 70, - cells: [ - { value: `Product List ${new Date().getFullYear()}`, fontSize: 30, colSpan: 5 }, - ] - }; - const footerRow = { - height: 70, - cells: [ - { value: `Total revenue 1 000 000`, fontSize: 30, colSpan: 5 }, - ] - }; - rows.unshift(headerRow); - rows.push(footerRow); - this._export.save(options); - }; - render() { - return ( - (this._export = exporter)}> - - - - - - - - - - - - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/excel-export-header-footer/main.jsx b/docs/knowledge-base/examples/grid/excel-export-header-footer/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/excel-export-header-footer/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/excel-export-parent-child/app.jsx b/docs/knowledge-base/examples/grid/excel-export-parent-child/app.jsx deleted file mode 100644 index d7b61137..00000000 --- a/docs/knowledge-base/examples/grid/excel-export-parent-child/app.jsx +++ /dev/null @@ -1,142 +0,0 @@ - -import React, { useEffect, useState, useRef } from 'react'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { saveAs } from '@progress/kendo-file-saver'; -import { ExcelExport, KendoOoxml } from '@progress/kendo-react-excel-export'; - -const DetailComponent = (props) => { - const data = props.dataItem.details; - if (data) { - return ( - - - - - ); - } - return ( -
-
-
-
-
- ); -}; - -const App = () => { - const baseUrl = 'https://demos.telerik.com/kendo-ui/service-v4/odata/'; - const init = { method: 'GET', accept: 'application/json', headers: {} }; - const exportRef = useRef(); - const [categories, setCategories] = useState([]); - - const expandChange = (event) => { - event.dataItem.expanded = event.value; - let categoryID = event.dataItem.CategoryID; - if (!event.value || event.dataItem.details) { - return; - } - - fetch(`${baseUrl}Products?\$filter=CategoryID%20eq%20${categoryID}`, init) - .then((response) => response.json()) - .then((json) => { - setCategories((prevState) => { - const data = [...prevState]; - const index = data.findIndex((d) => d.CategoryID === categoryID); - data[index].details = json.value; - return data; - }); - }); - }; - const exportToExcel = () => { - let workbook = exportRef.current.workbookOptions(); - let rows = workbook.sheets[0].rows; - let headerOptions = rows[0].cells[0]; - let data = categories; - let count = 0; - let allProducts = []; - fetch(`${baseUrl}Products`, init) - .then((response) => response.json()) - .then((json) => { - allProducts = json.value; - }) - .then(() => { - new Promise((resolve, reject) => { - for (let idx = data.length - 1; idx >= 0; idx--) { - let products = allProducts.filter( - (element) => element.CategoryID === data[idx].CategoryID - ); - for ( - let productIdx = products.length - 1; - productIdx >= 0; - productIdx-- - ) { - const product = products[productIdx]; - rows.splice(idx + 2, 0, { - cells: [ - {}, - { value: product.ProductID }, - { value: product.ProductName }, - ], - }); - } - rows.splice(idx + 2, 0, { - cells: [ - {}, - Object.assign({}, headerOptions, { value: 'Product ID' }), - Object.assign({}, headerOptions, { value: 'Product Name' }), - ], - }); - count++; - if (count >= data.length) { - resolve(); - } - } - }).then(() => { - new KendoOoxml.Workbook(workbook).toDataURL().then((dataUrl) => { - saveAs(dataUrl, 'Categories.xlsx'); - }); - }); - }); - }; - - useEffect(() => { - fetch(`${baseUrl}Categories`, init) - .then((response) => response.json()) - .then((json) => { - setCategories(json.value); - }); - }, []); - - return ( -
- - - - - - - - - - -
- ); -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/excel-export-parent-child/main.jsx b/docs/knowledge-base/examples/grid/excel-export-parent-child/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/excel-export-parent-child/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/app.jsx b/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/app.jsx deleted file mode 100644 index 23fd1e73..00000000 --- a/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/app.jsx +++ /dev/null @@ -1,316 +0,0 @@ -import * as React from 'react'; -import { - Grid, - GRID_COL_INDEX_ATTRIBUTE, - GridColumn as Column, - GridToolbar, - getSelectedState, - getSelectedStateFromKeyDown, -} from '@progress/kendo-react-grid'; - -import { getter } from '@progress/kendo-react-common'; -import { process } from '@progress/kendo-data-query'; -import { - setExpandedState, - setGroupIds, -} from '@progress/kendo-react-data-tools'; -import { - ExcelExport, -} from '@progress/kendo-react-excel-export'; -import products from './products.json'; -const DATA_ITEM_KEY = 'ProductID'; -const SELECTED_FIELD = 'selected'; -const idGetter = getter(DATA_ITEM_KEY); -const initialDataState = { - take: 10, - skip: 0, - group: [ - { - field: 'UnitsInStock', - }, - { - field: 'ProductName', - }, - ], -}; -const aggregates = [ - { - field: 'UnitsInStock', - aggregate: 'sum', - }, - { - field: 'UnitPrice', - aggregate: 'average', - }, -]; - -const processWithGroups = (data, dataState) => { - const groups = dataState.group; - - if (groups) { - groups.map((group) => (group.aggregates = aggregates)); - } - - dataState.group = groups; - const newDataState = process(data, dataState); - setGroupIds({ - data: newDataState.data, - group: dataState.group, - }); - return newDataState; -}; - -const App = () => { - const _export = React.useRef(null); - const [selectedState, setSelectedState] = React.useState({}); - const [gridColumns, setGridColumns] = React.useState([]); - const [dataState, setDataState] = React.useState(initialDataState); - const [result, setResult] = React.useState( - processWithGroups(products, initialDataState) - ); - const [collapsedState, setCollapsedState] = React.useState([]); - const gridRef = React.useRef(); - - const dataStateChange = (event) => { - const newDataState = processWithGroups(products, event.dataState); - setResult(newDataState); - setDataState(event.dataState); - }; - const save = (component) => { - const reorderedColumns = gridRef.current.columns.sort((a, b) => { - return a.orderIndex - b.orderIndex; - }); - - const options = component.current.workbookOptions(); - const rows = options.sheets[0].rows; - rows.forEach((row) => { - if (row.type === 'group-header') { - row.cells.forEach((cell) => { - cell.value = cell.value; - }); - } - }); - component.current.save(options); - }; - - const excelExport = () => { - if (_export.current) { - save(_export); - } - }; - - const onSelectionChange = (event) => { - debugger; - const newSelectedState = getSelectedState({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }; - - const onKeyDown = (event) => { - const newSelectedState = getSelectedStateFromKeyDown({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }; - - const onDragChange = (event) => { - setDragEnabled(event.value); - }; - - const expandChange = (event) => { - const item = event.dataItem; - - if (item.groupId) { - const newCollapsedIds = !event.value - ? [...collapsedState, item.groupId] - : collapsedState.filter((groupId) => groupId !== item.groupId); - setCollapsedState(newCollapsedIds); - } - }; - - const getCells = (columns, cellProps) => { - let cells = []; - columns.forEach((column) => { - if (column.aggregate) { - cells.push( - - {cellProps.dataItem.aggregates[column.field][column.aggregate]} - - ); - } else { - cells.push( ); - } - }); - return cells; - }; - const CustomCell = (props) => { - if (props.rowType == 'groupHeader') { - return ; - } - return ( - alert('hai')} - > - {props.dataItem.items - ? props.dataItem.items[0][props.field] - : props.dataItem[props.field]} - - ); - }; - const cellRender = (tdElement, cellProps) => { - if ( - cellProps.rowType === 'groupHeader' && - tdElement && - tdElement.props.role != 'presentation' - ) { - const columns = [ - { field: 'UnitPrice', aggregate: 'average' }, - { field: 'UnitsInStock', aggregate: 'sum' }, - { field: 'CategoryName' }, - ]; - - return ( - <> - - {getCells(columns, cellProps)} - - ); - } - if (cellProps.rowType === 'groupFooter') { - if (cellProps.field === 'UnitPrice') { - return ( - - Average: {cellProps.dataItem.aggregates.UnitPrice.average} - - ); - } else if (cellProps.field === 'UnitsInStock') { - return ( - - Sum: {cellProps.dataItem.aggregates.UnitsInStock.sum} - - ); - } - } - - return tdElement; - }; - - const setSelectedValue = (data) => { - let newData = data.map((item) => { - if (item.items) { - return { - ...item, - items: setSelectedValue(item.items), - }; - } else { - return { - ...item, - ['selected']: selectedState[idGetter(item)], - }; - } - }); - return newData; - }; - React.useEffect(() => { - setGridColumns(gridRef.current.columns); - }, []); - const onColumnReorder = (ev) => { - const reorderedColumns = ev.columns.sort((a, b) => { - return a.orderIndex - b.orderIndex; - }); - setGridColumns(reorderedColumns); - }; - const newData = setExpandedState({ - data: setSelectedValue(result.data), - collapsedIds: collapsedState, - }); - return ( - - - - - - - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/main.jsx b/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/products.json b/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/excel-export-with-column-reorder/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/expand-with-flat-data/app.jsx b/docs/knowledge-base/examples/grid/expand-with-flat-data/app.jsx deleted file mode 100644 index ae1feff2..00000000 --- a/docs/knowledge-base/examples/grid/expand-with-flat-data/app.jsx +++ /dev/null @@ -1,136 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -const testData = [ - { - ProductID: 1, - ProductName: 'Chai', - Discontinued: false, - ParentID: 0, - Category: { - CategoryID: 1, - CategoryName: 'Beverages', - Description: 'Soft drinks, coffees, teas, beers, and ales', - }, - }, - { - ProductID: 2, - ProductName: 'Chang', - Discontinued: false, - ParentID: 1, - Category: { - CategoryID: 1, - CategoryName: 'Beverages', - Description: 'Soft drinks, coffees, teas, beers, and ales', - }, - }, - { - ProductID: 3, - ProductName: 'Aniseed Syrup', - Discontinued: false, - ParentID: 1, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - }, - { - ProductID: 4, - ProductName: "Chef Anton's Cajun Seasoning", - Discontinued: false, - ParentID: 0, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - }, - { - ProductID: 5, - ProductName: "Chef Anton's Gumbo Mix", - Discontinued: true, - ParentID: 4, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - }, -]; - -const MyGridContext = React.createContext({}); -const ExpandCell = (props) => { - const { data, setDate } = React.useContext(MyGridContext); - - const handleExpandClick = (ev) => { - let expanded = !props.dataItem.expanded; - const newData = data.map((item) => ({ - ...item, - expanded: - item.ProductID === props.dataItem.ProductID || - item.ParentID === props.dataItem.ProductID - ? expanded - : item.expanded, - })); - setDate(newData); - }; - - return ( - - {props.dataItem.ParentID == 0 ? ( - - ) : ( - <> - )} - - ); -}; - -const addExpandedToData = (data) => { - const newData = data.map((item) => { - item.expanded = false; - return item; - }); - return newData; -}; - -//Handle child rows visibility -const rowRender = (tr, props) => { - const trProps = { - ...tr.props, - }; - if (props.dataItem.ParentID == 0 || props.dataItem.expanded) { - return React.cloneElement(tr, { ...trProps }, tr.props.children); - } else { - return <>; - } -}; -const App = () => { - const [data, setDate] = React.useState(addExpandedToData(testData)); - - return ( - - - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/expand-with-flat-data/main.jsx b/docs/knowledge-base/examples/grid/expand-with-flat-data/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/expand-with-flat-data/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/app.jsx b/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/app.jsx deleted file mode 100644 index d029daef..00000000 --- a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/app.jsx +++ /dev/null @@ -1,146 +0,0 @@ -import * as React from 'react'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { sampleProducts } from './shared-sample-products'; -import { MyCommandCell } from './myCommandCell'; -import { DropDownCell } from './myDropDownCell'; -import { insertItem, getItems, updateItem, deleteItem } from './services'; -import { PopupPropsContext } from '@progress/kendo-react-popup'; - -const App = () => { - const editField = 'inEdit'; - const [data, setData] = React.useState(sampleProducts); - const CommandCell = (props) => ( - - ); - - // modify the data in the store, db etc - const remove = (dataItem) => { - const newData = deleteItem(dataItem); - setData(newData); - }; - const add = (dataItem) => { - dataItem.inEdit = true; - const newData = insertItem(dataItem); - setData(newData); - }; - const update = (dataItem) => { - dataItem.inEdit = false; - const newData = updateItem(dataItem); - setData(newData); - }; - - // Local state operations - const discard = (dataItem) => { - const newData = [...data]; - newData.splice(0, 1); - setData(newData); - }; - const cancel = (dataItem) => { - const originalItem = getItems().find( - (p) => p.ProductID === dataItem.ProductID - ); - const newData = data.map((item) => - item.ProductID === originalItem.ProductID ? originalItem : item - ); - setData(newData); - }; - const enterEdit = (dataItem) => { - let newData = data.map((item) => - item.ProductID === dataItem.ProductID - ? { - ...item, - inEdit: true, - } - : item - ); - setData(newData); - }; - const itemChange = (event) => { - const field = event.field || ''; - const newData = data.map((item) => - item.ProductID === event.dataItem.ProductID - ? { - ...item, - [field]: event.value, - } - : item - ); - setData(newData); - }; - const addNew = () => { - const newDataItem = { - inEdit: true, - Discontinued: false, - ProductID: new Date().getMilliseconds(), - }; - setData([newDataItem, ...data]); - }; - - const gridRef = React.useRef(null); - - return ( - { - let scrollableContainer = - gridRef?.current?.element.querySelector('.k-grid-content'); - if (scrollableContainer && scrollableContainer.contains(props.anchor)) { - return { - //adding the existing props of the Popup - ...props, - //setting the appendTo to the Grid's scrollable container - appendTo: - gridRef?.current?.element.querySelector('.k-grid-content'), - }; - } else { - return { ...props }; - } - }} - > - - - - - - - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/main.jsx b/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/myCommandCell.jsx b/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/myCommandCell.jsx deleted file mode 100644 index b245a93b..00000000 --- a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/myCommandCell.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import * as React from "react"; -export const MyCommandCell = props => { - const { - dataItem - } = props; - const inEdit = dataItem[props.editField]; - const isNewItem = dataItem.ProductID === undefined; - return inEdit ? - - - : - - - ; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/myDropDownCell.jsx b/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/myDropDownCell.jsx deleted file mode 100644 index e4a225aa..00000000 --- a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/myDropDownCell.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import * as React from 'react'; -import { DropDownList } from '@progress/kendo-react-dropdowns'; -export const DropDownCell = props => { - const localizedData = [{ - text: 'yes', - value: true - }, { - text: 'no', - value: false - }, { - text: '(empty)', - value: null - }]; - const handleChange = e => { - if (props.onChange) { - props.onChange({ - dataIndex: 0, - dataItem: props.dataItem, - field: props.field, - syntheticEvent: e.syntheticEvent, - value: e.target.value.value - }); - } - }; - const { - dataItem - } = props; - const field = props.field || ''; - const dataValue = dataItem[field] === null ? '' : dataItem[field]; - return - {dataItem.inEdit ? c.value === dataValue)} data={localizedData} textField="text" /> : dataValue.toString()} - ; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/services.js b/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/services.js deleted file mode 100644 index 3a7d39ca..00000000 --- a/docs/knowledge-base/examples/grid/fix-editors-popup-position-issue/services.js +++ /dev/null @@ -1,22 +0,0 @@ -import { sampleProducts } from "./shared-sample-products"; -let data = [...sampleProducts]; -const generateId = data => data.reduce((acc, current) => Math.max(acc, current.ProductID), 0) + 1; -export const insertItem = item => { - item.ProductID = generateId(data); - item.inEdit = false; - data.unshift(item); - return data; -}; -export const getItems = () => { - return data; -}; -export const updateItem = item => { - let index = data.findIndex(record => record.ProductID === item.ProductID); - data[index] = item; - return data; -}; -export const deleteItem = item => { - let index = data.findIndex(record => record.ProductID === item.ProductID); - data.splice(index, 1); - return data; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-add-clear-filters-button/app.jsx b/docs/knowledge-base/examples/grid/grid-add-clear-filters-button/app.jsx deleted file mode 100644 index 516d4822..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-clear-filters-button/app.jsx +++ /dev/null @@ -1,90 +0,0 @@ -import * as React from 'react'; - -import { process } from '@progress/kendo-data-query'; -import { Button } from '@progress/kendo-react-buttons'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; - -let products = [ - { - ProductID: 1, - ProductName: 'Chai', - UnitPrice: 18.0, - Discontinued: false, - }, - { - ProductID: 2, - ProductName: 'Chang', - UnitPrice: 11.0, - Discontinued: false, - }, -]; - -const createDataState = (dataState) => { - return { - result: process(products.slice(0), dataState), - dataState: dataState, - }; -}; - -const App = () => { - let initialState = createDataState({ - take: 8, - skip: 0, - filter: { - logic: 'and', - filters: [ - { - field: 'ProductName', - operator: 'contains', - value: 'Chai', - }, - { - field: 'ProductID', - operator: 'eq', - value: 1, - }, - ], - }, - }); - - const [result, setResult] = React.useState(initialState.result); - const [dataState, setDataState] = React.useState(initialState.dataState); - - const dataStateChange = (event) => { - let updatedState = createDataState(event.dataState); - setResult(updatedState.result); - setDataState(updatedState.dataState); - }; - - const clearFilters = (ev) => { - let updatedState = createDataState({ ...dataState, filter: null }); //here the filter object is set to null - setResult(updatedState.result); - setDataState(updatedState.dataState); - }; - - return ( - - - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-add-clear-filters-button/main.jsx b/docs/knowledge-base/examples/grid/grid-add-clear-filters-button/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-clear-filters-button/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/app.jsx b/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/app.jsx deleted file mode 100644 index bbe55e4d..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/app.jsx +++ /dev/null @@ -1,140 +0,0 @@ -import * as React from 'react'; - -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { sampleProducts } from './sample-products'; -import { CellRender, RowRender } from './renderers'; -import './styles.css'; - -const EDIT_FIELD = 'inEdit'; -const DATA_KEY_FIELD = 'ProductID'; -const App = () => { - const [data, setData] = React.useState(sampleProducts); - const [originalData, setOriginalData] = React.useState(sampleProducts); - const [changes, setChanges] = React.useState(false); - const [dirty, setDirty] = React.useState({}); - const enterEdit = (dataItem, field) => { - const newData = data.map((item) => ({ - ...item, - [EDIT_FIELD]: item.ProductID === dataItem.ProductID ? field : undefined, - })); - setData(newData); - }; - - const exitEdit = () => { - const newData = data.map((item) => ({ ...item, [EDIT_FIELD]: undefined })); - setData(newData); - }; - - const saveChanges = () => { - sampleProducts.splice(0, sampleProducts.length, ...data); - setOriginalData(sampleProducts); - setChanges(false); - setDirty({}); - }; - - const cancelChanges = () => { - setData(sampleProducts); - setChanges(false); - setDirty({}); - }; - - const itemChange = (event) => { - let field = event.field || ''; - event.dataItem[field] = event.value; - let isDirty = true; - let newData = data.map((item) => { - if (item[DATA_KEY_FIELD] === event.dataItem[DATA_KEY_FIELD]) { - item[field] = event.value; - let originalItem = originalData.find( - (i) => i.ProductID == event.dataItem[DATA_KEY_FIELD] - ); - if (originalItem) { - isDirty = originalItem[field] != event.value; - } - } - - return item; - }); - - let newDirty = { ...dirty }; - newDirty[event.dataItem[DATA_KEY_FIELD]] = { - ...dirty[event.dataItem[DATA_KEY_FIELD]], - [field]: isDirty, - }; - setDirty(newDirty); - setData(newData); - setChanges(true); - }; - - const customCellRender = (td, props) => ( - - ); - - const customRowRender = (tr, props) => ( - - ); - - return ( - { - item.dirty = dirty[item[DATA_KEY_FIELD]]; - return item; - })} - dataItemKey={DATA_KEY_FIELD} - rowHeight={50} - onItemChange={itemChange} - cellRender={customCellRender} - rowRender={customRowRender} - editField={EDIT_FIELD} - > - - - - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/main.jsx b/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/renderers.jsx b/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/renderers.jsx deleted file mode 100644 index a7375efb..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/renderers.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import * as React from 'react'; -export const CellRender = (props) => { - const dataItem = props.originalProps.dataItem; - const cellField = props.originalProps.field; - const inEditField = dataItem[props.editField || '']; - const additionalProps = - cellField && cellField === inEditField - ? { - ref: (td) => { - const input = td && td.querySelector('input'); - const activeElement = document.activeElement; - - if ( - !input || - !activeElement || - input === activeElement || - !activeElement.contains(input) - ) { - return; - } - - if (input.type === 'checkbox') { - input.focus(); - } else { - input.select(); - } - }, - } - : { - onClick: () => { - props.enterEdit(dataItem, cellField); - }, - }; - - //Adding a dirty class name to the cells if there is a change - if ( - props.originalProps.dataItem.dirty && - props.originalProps.dataItem.dirty[cellField] - ) { - additionalProps.className = 'dirty'; - } - const clonedProps = { ...props.td.props, ...additionalProps }; - return React.cloneElement(props.td, clonedProps, props.td.props.children); -}; -export const RowRender = (props) => { - const trProps = { - ...props.tr.props, - onBlur: () => { - props.exitEdit(); - }, - }; - return React.cloneElement(props.tr, { ...trProps }, props.tr.props.children); -}; diff --git a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/sample-products.jsx b/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/sample-products.jsx deleted file mode 100644 index e06a78e4..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/sample-products.jsx +++ /dev/null @@ -1,171 +0,0 @@ -export const sampleProducts = [{ - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - }]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/styles.css b/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/styles.css deleted file mode 100644 index 0913044e..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-dirty-indicator/styles.css +++ /dev/null @@ -1,11 +0,0 @@ -td.dirty:before { - font-family: 'WebComponentsIcons'; - color: red; - content: '\e000'; - margin-top: -12px; - margin-right: -17px; - font-size: 14px; - line-height: 0px; - float: right; - } - \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-add-empty-rows/app.jsx b/docs/knowledge-base/examples/grid/grid-add-empty-rows/app.jsx deleted file mode 100644 index a1c92dfc..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-empty-rows/app.jsx +++ /dev/null @@ -1,97 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; - -/* Generating example data */ -const createRandomData = (count) => { - const firstNames = ['Nancy', 'Andrew', 'Janet', 'Margaret', 'Steven'], - lastNames = ['Davolio', 'Fuller', 'Leverling', 'Peacock'], - cities = ['Seattle', 'Tacoma', 'Kirkland', 'Redmond', 'London'], - titles = [ - 'Accountant', - 'Vice President, Sales', - 'Sales Representative', - 'Technical Support', - ]; - return Array(count) - .fill({}) - .map((_, idx) => ({ - id: idx + 1, - firstName: firstNames[Math.floor(Math.random() * firstNames.length)], - lastName: lastNames[Math.floor(Math.random() * lastNames.length)], - city: cities[Math.floor(Math.random() * cities.length)], - title: titles[Math.floor(Math.random() * titles.length)], - })); -}; - -//Component -const App = () => { - const [data] = React.useState(createRandomData(5)); - const [skip, setSkip] = React.useState(0); - const [gridHeight, setGridHeight] = React.useState(450); - - const pageChange = (event) => { - setSkip(event.page.skip); - }; - const cityFooterCell = (props) => { - return Test; - }; - - const getEmptyCells = (tr) => { - let content = []; - for (let i = 0; i < tr.props.children.length; i++) { - content.push( ); - } - return content; - }; - const getEmptyRows = (tr, rowsNeeded) => { - let content = []; - for (let i = 0; i < rowsNeeded; i++) { - content.push({getEmptyCells(tr)}); - } - return content; - }; - const rowRender = (tr, props) => { - //find the last TR element and add more rows along with it to fill the empty space in the scrollable container - if (data.length < 20 && props.dataIndex == data.length - 1) { - let rowsNeeded = - Math.floor(gridHeight / props.rowHeight) - data.length - 1; - return ( - - - {getEmptyRows(tr, rowsNeeded)} - - ); - } - - return ; - }; - return ( - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-add-empty-rows/main.jsx b/docs/knowledge-base/examples/grid/grid-add-empty-rows/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-add-empty-rows/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-cell-state-editing/app.jsx b/docs/knowledge-base/examples/grid/grid-cell-state-editing/app.jsx deleted file mode 100644 index 6789bf08..00000000 --- a/docs/knowledge-base/examples/grid/grid-cell-state-editing/app.jsx +++ /dev/null @@ -1,216 +0,0 @@ -import * as React from 'react'; - -import { - Grid, - GridColumn as Column, - getSelectedState, -} from '@progress/kendo-react-grid'; -import { getter } from '@progress/kendo-react-common'; -import products from './shared-products.json'; - -import { NumericTextBox, Input } from '@progress/kendo-react-inputs'; - -const MyContext = React.createContext({ - enterEdit: null, -}); - -const DATA_ITEM_KEY = 'ProductID'; -const SELECTED_FIELD = 'selected'; -const idGetter = getter(DATA_ITEM_KEY); - -for (let i = 0; i < 500; i++) { - products.push({ - ProductID: i + 78, - ProductName: i + 'test', - selected: false, - }); -} - -const TextCell = (props) => { - const currentContext = React.useContext(MyContext); - const [value, setValue] = React.useState(props.dataItem[props.field]); - const handleChange = (event) => { - setValue(event.value); - }; - - const handleBlur = (event) => { - props.onChange({ - dataItem: props.dataItem, - field: props.field, - syntheticEvent: event.syntheticEvent, - value: value, - }); - }; - if (props.dataItem.inEdit) { - return ( - - - - ); - } else { - return ( - currentContext.enterEdit(props.dataItem)} - > - {props.dataItem[props.field]} - - ); - } -}; - -const NumberCell = (props) => { - const currentContext = React.useContext(MyContext); - const [value, setValue] = React.useState(props.dataItem[props.field]); - const handleChange = (event) => { - setValue(event.value); - }; - - const handleBlur = (event) => { - props.onChange({ - dataItem: props.dataItem, - field: props.field, - syntheticEvent: event.syntheticEvent, - value: value, - }); - }; - if (props.dataItem.inEdit) { - return ( - - - - ); - } else { - return ( - currentContext.enterEdit(props.dataItem)} - > - {props.dataItem[props.field]} - - ); - } -}; - -const App = () => { - const [data, setData] = React.useState(products); - const [selectedState, setSelectedState] = React.useState({}); - - const selectionChange = (event) => { - const newSelectedState = getSelectedState({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }; - - const itemChange = (event) => { - const inEditID = event.dataItem.ProductID; - const field = event.field || ''; - const newData = data.map((item) => - item.ProductID === inEditID ? { ...item, [field]: event.value } : item - ); - setData(newData); - }; - - const headerSelectionChange = (event) => { - const checked = event.syntheticEvent.target.checked; - const newSelectedState = {}; - data.forEach((item) => { - newSelectedState[idGetter(item)] = checked; - }); - setSelectedState(newSelectedState); - }; - - const enterEdit = (dataItem) => { - const inEditID = dataItem.ProductID; - const newData = data.map((item) => - item.ProductID === inEditID - ? { ...item, inEdit: true } - : { ...item, inEdit: false } - ); - setData(newData); - }; - - return ( -
- - ({ - ...item, - [SELECTED_FIELD]: selectedState[idGetter(item)], - }))} - style={{ - height: '400px', - }} - dataItemKey={DATA_ITEM_KEY} - selectedField={SELECTED_FIELD} - selectable={{ - enabled: true, - drag: false, - cell: false, - }} - onSelectionChange={selectionChange} - onHeaderSelectionChange={headerSelectionChange} - editField="inEdit" - onItemChange={itemChange} - > - !selectedState[idGetter(item)]) === -1 - } - /> - - - - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-cell-state-editing/main.jsx b/docs/knowledge-base/examples/grid/grid-cell-state-editing/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-cell-state-editing/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-cell-state-editing/products.jsx b/docs/knowledge-base/examples/grid/grid-cell-state-editing/products.jsx deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/grid-cell-state-editing/products.jsx +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/app.jsx b/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/app.jsx deleted file mode 100644 index 380abff8..00000000 --- a/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/app.jsx +++ /dev/null @@ -1,89 +0,0 @@ -import * as React from 'react'; - -import { LocalizationProvider, loadMessages } from '@progress/kendo-react-intl'; -import { - Grid, - GridColumn as Column, - GRID_COL_INDEX_ATTRIBUTE, -} from '@progress/kendo-react-grid'; -import { filterBy } from '@progress/kendo-data-query'; -import { sampleProducts } from './sample-products'; -import { useTableKeyboardNavigation } from '@progress/kendo-react-data-tools'; -const initialFilter = { - logic: 'and', - filters: [ - { - field: 'ProductName', - operator: 'contains', - value: 'Chef', - }, - ], -}; -loadMessages( - { - grid: { - filterIsTrue: 'Yes', - filterIsFalse: 'No', - }, - }, - 'myCustomMessages' -); - -const BooleanYesNoCell = (props) => { - const field = props.field || ''; - const value = props.dataItem[field]; - const navigationAttributes = useTableKeyboardNavigation(props.id); - let content = ( - - {value === null ? '' : props.dataItem[field] ? 'Yes' : 'No'} - - ); - - return props.render ? props.render.call(undefined, content, props) : content; -}; -const App = () => { - const [filter, setFilter] = React.useState(initialFilter); - return ( - - setFilter(e.filter)} - > - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/main.jsx b/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/sample-products.jsx b/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/sample-products.jsx deleted file mode 100644 index 2cbaa9ec..00000000 --- a/docs/knowledge-base/examples/grid/grid-change-boolean-filter-to-yesno/sample-products.jsx +++ /dev/null @@ -1,183 +0,0 @@ -export const sampleProducts = [ - { - ProductID: 1, - ProductName: 'Chai', - SupplierID: 1, - CategoryID: 1, - QuantityPerUnit: '10 boxes x 20 bags', - UnitPrice: 18, - UnitsInStock: 39, - UnitsOnOrder: 0, - ReorderLevel: 10, - Discontinued: false, - Category: { - CategoryID: 1, - CategoryName: 'Beverages', - Description: 'Soft drinks, coffees, teas, beers, and ales', - }, - FirstOrderedOn: new Date(1996, 8, 20), - }, - { - ProductID: 2, - ProductName: 'Chang', - SupplierID: 1, - CategoryID: 1, - QuantityPerUnit: '24 - 12 oz bottles', - UnitPrice: 19, - UnitsInStock: 17, - UnitsOnOrder: 40, - ReorderLevel: 25, - Discontinued: false, - Category: { - CategoryID: 1, - CategoryName: 'Beverages', - Description: 'Soft drinks, coffees, teas, beers, and ales', - }, - FirstOrderedOn: new Date(1996, 7, 12), - }, - { - ProductID: 3, - ProductName: 'Aniseed Syrup', - SupplierID: 1, - CategoryID: 2, - QuantityPerUnit: '12 - 550 ml bottles', - UnitPrice: 10, - UnitsInStock: 13, - UnitsOnOrder: 70, - ReorderLevel: 25, - Discontinued: false, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - FirstOrderedOn: new Date(1996, 8, 26), - }, - { - ProductID: 4, - ProductName: "Chef Anton's Cajun Seasoning", - SupplierID: 2, - CategoryID: 2, - QuantityPerUnit: '48 - 6 oz jars', - UnitPrice: 22, - UnitsInStock: 53, - UnitsOnOrder: 0, - ReorderLevel: 0, - Discontinued: false, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - FirstOrderedOn: new Date(1996, 9, 19), - }, - { - ProductID: 5, - ProductName: "Chef Anton's Gumbo Mix", - SupplierID: 2, - CategoryID: 2, - QuantityPerUnit: '36 boxes', - UnitPrice: 21.35, - UnitsInStock: 0, - UnitsOnOrder: 0, - ReorderLevel: 0, - Discontinued: true, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - FirstOrderedOn: new Date(1996, 7, 17), - }, - { - ProductID: 6, - ProductName: "Grandma's Boysenberry Spread", - SupplierID: 3, - CategoryID: 2, - QuantityPerUnit: '12 - 8 oz jars', - UnitPrice: 25, - UnitsInStock: 120, - UnitsOnOrder: 0, - ReorderLevel: 25, - Discontinued: false, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - FirstOrderedOn: new Date(1996, 9, 19), - }, - { - ProductID: 7, - ProductName: "Uncle Bob's Organic Dried Pears", - SupplierID: 3, - CategoryID: 7, - QuantityPerUnit: '12 - 1 lb pkgs.', - UnitPrice: 30, - UnitsInStock: 15, - UnitsOnOrder: 0, - ReorderLevel: 10, - Discontinued: false, - Category: { - CategoryID: 7, - CategoryName: 'Produce', - Description: 'Dried fruit and bean curd', - }, - FirstOrderedOn: new Date(1996, 7, 22), - }, - { - ProductID: 8, - ProductName: 'Northwoods Cranberry Sauce', - SupplierID: 3, - CategoryID: 2, - QuantityPerUnit: '12 - 12 oz jars', - UnitPrice: 40, - UnitsInStock: 6, - UnitsOnOrder: 0, - ReorderLevel: 0, - Discontinued: false, - Category: { - CategoryID: 2, - CategoryName: 'Condiments', - Description: 'Sweet and savory sauces, relishes, spreads, and seasonings', - }, - FirstOrderedOn: new Date(1996, 11, 1), - }, - { - ProductID: 9, - ProductName: 'Mishi Kobe Niku', - SupplierID: 4, - CategoryID: 6, - QuantityPerUnit: '18 - 500 g pkgs.', - UnitPrice: 97, - UnitsInStock: 29, - UnitsOnOrder: 0, - ReorderLevel: 0, - Discontinued: true, - Category: { - CategoryID: 6, - CategoryName: 'Meat/Poultry', - Description: 'Prepared meats', - }, - FirstOrderedOn: new Date(1997, 1, 21), - }, - { - ProductID: 10, - ProductName: 'Ikura', - SupplierID: 4, - CategoryID: 8, - QuantityPerUnit: '12 - 200 ml jars', - UnitPrice: 31, - UnitsInStock: 31, - UnitsOnOrder: 0, - ReorderLevel: 0, - Discontinued: false, - Category: { - CategoryID: 8, - CategoryName: 'Seafood', - Description: 'Seaweed and fish', - }, - FirstOrderedOn: new Date(1996, 8, 5), - }, - ]; - \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/app.jsx b/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/app.jsx deleted file mode 100644 index f25eeae2..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/app.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import * as React from 'react'; - -import { process } from '@progress/kendo-data-query'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { ColumnMenuWithoutOperators } from './columnMenu'; -import './styles.css'; -const products = [ - { - ProductID: 1, - ProductName: 'Chai', - UnitPrice: 18.0, - Discontinued: false, - }, - { - ProductID: 2, - ProductName: 'Chai2', - UnitPrice: 12.0, - Discontinued: false, - }, -]; - -const createDataState = (dataState) => { - return { - result: process(products.slice(0), dataState), - dataState: dataState, - }; -}; - -const App = () => { - let initialState = createDataState({ - take: 8, - skip: 0, - }); - const [result, setResult] = React.useState(initialState.result); - const [dataState, setDataState] = React.useState(initialState.dataState); - - const dataStateChange = (event) => { - let updatedState = createDataState(event.dataState); - setResult(updatedState.result); - setDataState(updatedState.dataState); - }; - - return ( - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/columnMenu.jsx b/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/columnMenu.jsx deleted file mode 100644 index aaeec9e6..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/columnMenu.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -import { GridColumnMenuFilter } from '@progress/kendo-react-grid'; - -export const ColumnMenuWithoutOperators = (props) => { - return ( -
- -
- ); -}; diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/main.jsx b/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/styles.css b/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/styles.css deleted file mode 100644 index adf3c1c7..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-filter-without-operators/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -.noDropDownFilter .k-dropdownlist { - display: none; - } - \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/app.jsx b/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/app.jsx deleted file mode 100644 index dd080185..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/app.jsx +++ /dev/null @@ -1,62 +0,0 @@ -import * as React from 'react'; - -import { process } from '@progress/kendo-data-query'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { ColumnMenu, ColumnMenuCheckboxFilter } from './columnMenu'; -import products from './products.json'; -const GridContext = React.createContext({}); - -const createDataState = (dataState) => { - return { - result: process(products.slice(0), dataState), - dataState: dataState, - }; -}; - -const ColumnMenuCheckboxFilterWithContext = (props) => { - const { columnMenuData } = React.useContext(GridContext); - return ; -}; -const App = () => { - let initialState = createDataState({ - take: 8, - skip: 0, - }); - const [result, setResult] = React.useState(initialState.result); - const [dataState, setDataState] = React.useState(initialState.dataState); - const dataStateChange = (event) => { - let updatedState = createDataState(event.dataState); - setResult(updatedState.result); - setDataState(updatedState.dataState); - }; - return ( - - - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/columnMenu.jsx b/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/columnMenu.jsx deleted file mode 100644 index e0916226..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/columnMenu.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { - GridColumnMenuFilter, - GridColumnMenuCheckboxFilter, -} from '@progress/kendo-react-grid'; -import { filterBy } from '@progress/kendo-data-query'; - - -export const ColumnMenu = (props) => { - return ( -
- -
- ); -}; - -export const ColumnMenuCheckboxFilter = (props) => { - return ( -
- -
- ); -}; - \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/main.jsx b/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/products.json b/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/products.json deleted file mode 100644 index 7de85b10..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenu-pass-data-with-context/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/app.jsx b/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/app.jsx deleted file mode 100644 index 6d987ee9..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/app.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import * as React from 'react'; - -import { process } from '@progress/kendo-data-query'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { ColumnMenu, ProductNameolumnMenuCheckboxFilter } from './columnMenu'; -import products from './shared-products.json'; - -const createDataState = (dataState) => { - return { - result: process(products.slice(0), dataState), - dataState: dataState, - }; -}; - -const App = () => { - let initialState = createDataState({ - take: 8, - skip: 0, - }); - const [result, setResult] = React.useState(initialState.result); - const [dataState, setDataState] = React.useState(initialState.dataState); - - const dataStateChange = (event) => { - event.dataState.filter.filters.forEach((filter) => { - filter.filters.forEach((innerFilter) => { - if (innerFilter.field == 'ProductName') { - //Change 'ProductName' with the field of the checkbox filter - innerFilter.operator = 'contains'; - } - }); - }); - let updatedState = createDataState(event.dataState); - setResult(updatedState.result); - setDataState(updatedState.dataState); - }; - - return ( - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/columnMenu.jsx b/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/columnMenu.jsx deleted file mode 100644 index 523ccd7c..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/columnMenu.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import * as React from 'react'; -import { - GridColumnMenuFilter, - GridColumnMenuCheckboxFilter, -} from '@progress/kendo-react-grid'; -export const ColumnMenu = (props) => { - return ( -
- -
- ); -}; - -export const ProductNameolumnMenuCheckboxFilter = (props) => { - return ( -
- -
- ); -}; diff --git a/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/main.jsx b/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-columnmenucheckboxfilter-with-contains/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/app.jsx b/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/app.jsx deleted file mode 100644 index 305ebf5c..00000000 --- a/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/app.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import products from './products.json'; -const initialDataState = { - skip: 0, - take: 10, -}; - -const App = () => { - const [page, setPage] = React.useState(initialDataState); - const [scrollable, setScrollable] = React.useState( - initialDataState.take > 10 ? 'scrollable' : 'none' - ); - const pageChange = (event) => { - setPage(event.page); - event.page.take > 10 ? setScrollable('scrollable') : setScrollable('none'); - }; - - return ( -
- - - - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/main.jsx b/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/products.json b/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/products.json deleted file mode 100644 index d3ab4ee8..00000000 --- a/docs/knowledge-base/examples/grid/grid-conditional-scrollbar/products.json +++ /dev/null @@ -1,155 +0,0 @@ -[ - { - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18.0000, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19.0000, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10.0000, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22.0000, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.3500, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25.0000, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30.0000, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40.0000, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97.0000, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - } -] diff --git a/docs/knowledge-base/examples/grid/grid-csv-export/app.jsx b/docs/knowledge-base/examples/grid/grid-csv-export/app.jsx deleted file mode 100644 index 740cef8b..00000000 --- a/docs/knowledge-base/examples/grid/grid-csv-export/app.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import { CSVDownload, CSVLink } from 'react-csv'; -import products from './shared-products.json'; -const initialDataState = { - skip: 0, - take: 10, -}; -const App = () => { - const [page, setPage] = React.useState(initialDataState); - const [pageSizeValue, setPageSizeValue] = React.useState(); - const pageChange = (event) => { - const targetEvent = event.syntheticEvent; - const take = - targetEvent.value === 'All' ? products.length : event.page.take; - if (targetEvent.value) { - setPageSizeValue(targetEvent.value); - } - setPage({ - ...event.page, - take, - }); - }; - return ( -
- Download me - - - - - - -
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-csv-export/main.jsx b/docs/knowledge-base/examples/grid/grid-csv-export/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-csv-export/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-custom-cell-with-selection/app.jsx b/docs/knowledge-base/examples/grid/grid-custom-cell-with-selection/app.jsx deleted file mode 100644 index f4e8783e..00000000 --- a/docs/knowledge-base/examples/grid/grid-custom-cell-with-selection/app.jsx +++ /dev/null @@ -1,99 +0,0 @@ -import * as React from 'react'; - -import { - GRID_COL_INDEX_ATTRIBUTE, - Grid, - GridColumn as Column, - getSelectedState, - getSelectedStateFromKeyDown, -} from '@progress/kendo-react-grid'; -import { getter } from '@progress/kendo-react-common'; -import { useTableKeyboardNavigation } from '@progress/kendo-react-data-tools'; - -export const CustomCell = (props) => { - const field = props.field || ''; - const value = props.dataItem[field]; - const navigationAttributes = useTableKeyboardNavigation(props.id); - return ( - - {value === null ? '' : props.dataItem[field].toString()} - - ); -}; - -const products = [ - { ProductID: 1, ProductName: 'Fish', UnitsInStock: 2, UnitPrice: 50 }, - { ProductID: 2, ProductName: 'Chips', UnitsInStock: 6, UnitPrice: 10 }, - { ProductID: 3, ProductName: 'Salsa', UnitsInStock: 10, UnitPrice: 20 }, - { ProductID: 4, ProductName: 'Steak', UnitsInStock: 20, UnitPrice: 65 }, -]; - -const DATA_ITEM_KEY = 'ProductID'; -const SELECTED_FIELD = 'selected'; -const idGetter = getter(DATA_ITEM_KEY); - -const App = () => { - const [data, setData] = React.useState( - products.map((dataItem) => - Object.assign( - { - selected: false, - }, - dataItem - ) - ) - ); - const [selectedState, setSelectedState] = React.useState({}); - const onSelectionChange = (event) => { - const newSelectedState = getSelectedState({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }; - const onKeyDown = (event) => { - const newSelectedState = getSelectedStateFromKeyDown({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }; - - return ( -
- ({ - ...item, - [SELECTED_FIELD]: selectedState[idGetter(item)], - }))} - dataItemKey={DATA_ITEM_KEY} - selectedField={SELECTED_FIELD} - selectable={{ - enabled: true, - cell: true, - }} - navigatable={true} - onSelectionChange={onSelectionChange} - onKeyDown={onKeyDown} - > - - - - -
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-custom-cell-with-selection/main.jsx b/docs/knowledge-base/examples/grid/grid-custom-cell-with-selection/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-custom-cell-with-selection/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-disable-reordering/app.jsx b/docs/knowledge-base/examples/grid/grid-disable-reordering/app.jsx deleted file mode 100644 index 74033504..00000000 --- a/docs/knowledge-base/examples/grid/grid-disable-reordering/app.jsx +++ /dev/null @@ -1,75 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { Button } from '@progress/kendo-react-buttons'; -import products from './shared-products.json'; - -const App = () => { - const [locked, setLocked] = React.useState(false); - - const handleClick = () => { - setLocked(!locked); - }; - - return ( -
-
-
- -
- -
- The Additional details Column is - - {locked ? ' Frozen' : ' Unfrozen'} - -
-
- - - - - - - - - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-disable-reordering/main.jsx b/docs/knowledge-base/examples/grid/grid-disable-reordering/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-disable-reordering/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/app.jsx b/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/app.jsx deleted file mode 100644 index 485ca2f1..00000000 --- a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/app.jsx +++ /dev/null @@ -1,149 +0,0 @@ -import * as React from 'react'; - -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { MyCommandCell } from './myCommandCell'; -import { insertItem, getItems, updateItem, deleteItem } from './services'; - -const editField = 'inEdit'; -const App = () => { - const [data, setData] = React.useState([]); - const [disableAddButton, setDisableAddButton] = React.useState(false); - - React.useEffect(() => { - let newItems = getItems(); - setData(newItems); - }, []); - - // modify the data in the store, db etc - const remove = (dataItem) => { - const newData = [...deleteItem(dataItem)]; - setData(newData); - }; - - const add = (dataItem) => { - dataItem.inEdit = true; - const newData = insertItem(dataItem); - setData(newData); - setDisableAddButton(false); - }; - - const update = (dataItem) => { - dataItem.inEdit = false; - const newData = updateItem(dataItem); - setData(newData); - setDisableAddButton(false); - }; - - // Local state operations - const discard = () => { - const newData = [...data]; - newData.splice(0, 1); - setData(newData); - setDisableAddButton(false); - }; - - const cancel = (dataItem) => { - const originalItem = getItems().find( - (p) => p.ProductID === dataItem.ProductID - ); - const newData = data.map((item) => - item.ProductID === originalItem.ProductID - ? originalItem - : { ...item, disableEdit: false } - ); - setData(newData); - setDisableAddButton(false); - }; - - const enterEdit = (dataItem) => { - setData( - data.map((item) => - item.ProductID === dataItem.ProductID - ? { - ...item, - inEdit: true, - } - : { ...item, disableEdit: true } - ) - ); - setDisableAddButton(true); - }; - - const itemChange = (event) => { - const newData = data.map((item) => - item.ProductID === event.dataItem.ProductID - ? { - ...item, - [event.field || '']: event.value, - } - : item - ); - setData(newData); - }; - - const addNew = () => { - const newDataItem = { - inEdit: true, - Discontinued: false, - }; - setData([newDataItem, ...data]); - setDisableAddButton(true); - }; - - const CommandCell = (props) => ( - - ); - - return ( - - - - - - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/main.jsx b/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/myCommandCell.jsx b/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/myCommandCell.jsx deleted file mode 100644 index 370ffea7..00000000 --- a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/myCommandCell.jsx +++ /dev/null @@ -1,46 +0,0 @@ -import * as React from 'react'; -export const MyCommandCell = (props) => { - const { dataItem } = props; - const inEdit = dataItem[props.editField]; - const isNewItem = dataItem.ProductID === undefined; - return inEdit ? ( - - - - - ) : ( - - - - - ); -}; diff --git a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/sample-products.jsx b/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/sample-products.jsx deleted file mode 100644 index e06a78e4..00000000 --- a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/sample-products.jsx +++ /dev/null @@ -1,171 +0,0 @@ -export const sampleProducts = [{ - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - }]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/services.js b/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/services.js deleted file mode 100644 index e873d661..00000000 --- a/docs/knowledge-base/examples/grid/grid-edit-one-item-at-a-time/services.js +++ /dev/null @@ -1,28 +0,0 @@ -import { sampleProducts } from './sample-products'; -let data = [...sampleProducts]; -const generateId = (data) => - data.reduce((acc, current) => Math.max(acc, current.ProductID), 0) + 1; - -export const insertItem = (item) => { - item.ProductID = generateId(data); - item.inEdit = false; - data.unshift(item); - return data; -}; - -export const getItems = () => { - return data; -}; - -export const updateItem = (item) => { - let index = data.findIndex((record) => record.ProductID === item.ProductID); - data[index] = item; - console.log(item); - return data; -}; - -export const deleteItem = (item) => { - let index = data.findIndex((record) => record.ProductID === item.ProductID); - data.splice(index, 1); - return data; -}; diff --git a/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/app.jsx b/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/app.jsx deleted file mode 100644 index c1133bee..00000000 --- a/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/app.jsx +++ /dev/null @@ -1,69 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import './styles.css'; - -/* Generating example data */ -const createRandomData = (count) => { - const firstNames = ['Nancy', 'Andrew', 'Janet', 'Margaret', 'Steven'], - lastNames = ['Davolio', 'Fuller', 'Leverling', 'Peacock', 'Buchanan'], - cities = ['Seattle', 'Tacoma', 'Kirkland', 'Redmond'], - titles = [ - 'Accountant', - 'Some very long title Some very long title Some very long title Some very long title Some very long title Some very long title, Sales', - 'Sales Representative', - 'Technical Support', - ]; - return Array(count) - .fill({}) - .map((_, idx) => ({ - id: idx + 1, - firstName: firstNames[Math.floor(Math.random() * firstNames.length)], - lastName: lastNames[Math.floor(Math.random() * lastNames.length)], - city: cities[Math.floor(Math.random() * cities.length)], - title: titles[Math.floor(Math.random() * titles.length)], - })); -}; - -//Grid -const App = () => { - const [data] = React.useState(createRandomData(50)); - const [skip, setSkip] = React.useState(0); - - const pageChange = (event) => { - setSkip(event.page.skip); - }; - - //Adding "ellipsis-cell" class name to each data cell - const cellRender = (td, props) => { - if (props.rowType == 'data') { - return ( - -
{td.props.children}
- - ); - } - return td; - }; - return ( - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/main.jsx b/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/styles.css b/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/styles.css deleted file mode 100644 index 17e68470..00000000 --- a/docs/knowledge-base/examples/grid/grid-ellipsis-data-cell/styles.css +++ /dev/null @@ -1,8 +0,0 @@ -.ellipsis-cell { - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 2; /* number of lines to show */ - line-clamp: 2; - -webkit-box-orient: vertical; -} diff --git a/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/app.jsx b/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/app.jsx deleted file mode 100644 index 0907e023..00000000 --- a/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/app.jsx +++ /dev/null @@ -1,114 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { DropDownList } from '@progress/kendo-react-dropdowns'; -import { Button } from '@progress/kendo-react-buttons'; -import { process } from '@progress/kendo-data-query'; -import { - setExpandedState, - setGroupIds, -} from '@progress/kendo-react-data-tools'; -import products from './products.json'; -const initialDataState = {}; - -const processWithGroups = (data, dataState) => { - const newDataState = process(data, dataState); - setGroupIds({ - data: newDataState.data, - group: dataState.group, - }); - return newDataState; -}; - -const App = () => { - const [dataState, setDataState] = React.useState(initialDataState); - const [resultState, setResultState] = React.useState( - processWithGroups(products, initialDataState) - ); - const [collapsedState, setCollapsedState] = React.useState([]); - const onDataStateChange = React.useCallback((event) => { - const newDataState = processWithGroups(products, event.dataState); - setDataState(event.dataState); - setResultState(newDataState); - }, []); - const onExpandChange = React.useCallback( - (event) => { - const item = event.dataItem; - - if (item.groupId) { - const newCollapsedIds = !event.value - ? [...collapsedState, item.groupId] - : collapsedState.filter((groupId) => groupId !== item.groupId); - setCollapsedState(newCollapsedIds); - } - }, - [collapsedState] - ); - const newData = setExpandedState({ - data: resultState.data, - collapsedIds: collapsedState, - }); - - const dropDownChange = (event) => { - const newState = { - ...dataState, - skip: 0, - filter: { - logic: 'and', - filters: [ - { - field: 'ProductName', - operator: 'contains', - value: event.value, - }, - ], - }, - }; - setDataState(newState); - setResultState(processWithGroups(products, newState)); - }; - - const [filterKey, setFilterKey] = React.useState(new Date()); - const clearFilters = ev =>{ - const newState = { - ...dataState, - filter: null, - }; - setDataState(newState); - setResultState(processWithGroups(products, newState)); - //clearing DropDownList value - setFilterKey(new Date()); - } - return ( - <> - item.ProductName)} - onChange={dropDownChange} - /> - - - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/main.jsx b/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/products.json b/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/grid-external-dropdownlist-filter/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/grid-filter-checkbox/app.jsx b/docs/knowledge-base/examples/grid/grid-filter-checkbox/app.jsx deleted file mode 100644 index 3fc1853b..00000000 --- a/docs/knowledge-base/examples/grid/grid-filter-checkbox/app.jsx +++ /dev/null @@ -1,91 +0,0 @@ -import * as React from 'react'; - -import { process } from '@progress/kendo-data-query'; -import { - Grid, GridColumn as Column -} from '@progress/kendo-react-grid'; - -import { CustomColumnMenu } from './customColumnMenu'; - -import products from './shared-products.json'; - -const createDataState = (dataState) => { - return { - result: process(products.slice(0), dataState), - dataState: dataState - }; -} - -const dataState = createDataState({ - take: 8, - skip: 0 -}); - -class App extends React.Component { - constructor(props) { - super(props); - - this.state = { - columns: [{ field: 'ProductName' }, { field: 'ProductID' }], - ...dataState - }; - } - - dataStateChange = (event) => { - this.setState(createDataState(event.data)); - } - - onReset = () => { - this.setState({ - result: process(products.slice(this.state.take), this.state.dataState) - }); - } - - onColumnsSubmit = (data) => { - let filterData = data.filter(item => { - if (item.filterChecked) { - return item - } - }) - this.setState({ - result: process(filterData, this.state.dataState) - }); - } - - render() { - return ( -
- - { - this.state.columns.map((column, idx) => - ( - - } - />) - )} - -
-
- ); - } -} - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-filter-checkbox/customColumnMenu.jsx b/docs/knowledge-base/examples/grid/grid-filter-checkbox/customColumnMenu.jsx deleted file mode 100644 index 3df29618..00000000 --- a/docs/knowledge-base/examples/grid/grid-filter-checkbox/customColumnMenu.jsx +++ /dev/null @@ -1,100 +0,0 @@ -import * as React from 'react'; -import { - GridColumnMenuSort, - GridColumnMenuItemGroup, GridColumnMenuItem, GridColumnMenuItemContent -} from '@progress/kendo-react-grid'; - -export class CustomColumnMenu extends React.Component { - constructor(props) { - super(props); - - this.state = { - data: this.props.data, - columnsExpanded: true - }; - } - - onToggleColumn = (item) => { - let data = this.props.data - data.map(dataItem => { - if (dataItem.ProductID === item.ProductID) { - dataItem.filterChecked ? - dataItem.filterChecked = false : - dataItem.filterChecked = true - } - return item - }) - - this.setState({ - data: data - }) - } - - onReset = (event) => { - event.preventDefault(); - this.props.onReset(); - if (this.props.onCloseMenu) { - this.props.onCloseMenu(); - } - } - - onSubmit = (event) => { - if (event) { - event.preventDefault(); - } - this.props.onColumnsSubmit(this.state.data); - if (this.props.onCloseMenu) { - this.props.onCloseMenu(); - } - } - - render() { - - return ( -
- - - - -
- -
- {this.state.data.map((item, idx) => - ( -
- - { this.onToggleColumn(item); }} - /> - - -
- ) - )} -
-
- - -
- -
-
-
-
); - } -} diff --git a/docs/knowledge-base/examples/grid/grid-filter-checkbox/main.jsx b/docs/knowledge-base/examples/grid/grid-filter-checkbox/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-filter-checkbox/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-filtering-api/app.tsx b/docs/knowledge-base/examples/grid/grid-filtering-api/app.tsx deleted file mode 100644 index 85a8b8b8..00000000 --- a/docs/knowledge-base/examples/grid/grid-filtering-api/app.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React, { useState, useEffect } from 'react'; - -import { - Grid, - GridColumn as Column, - GridFilterChangeEvent, -} from '@progress/kendo-react-grid'; -import { - filterBy, - CompositeFilterDescriptor, -} from '@progress/kendo-data-query'; - -const initialFilter: CompositeFilterDescriptor = { - logic: 'and', - filters: [ - { - field: 'name', - operator: 'contains', - value: 'Leanne Graham', - }, - ], -}; - -const App = () => { - const [users, setUsers] = useState([]); - const [filter, setFilter] = React.useState(initialFilter); - - useEffect(() => { - fetch('https://jsonplaceholder.typicode.com/users') - .then((response) => response.json()) - .then(setUsers); - }, []); - - return ( - setFilter(e.filter)} - > - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-filtering-api/main.tsx b/docs/knowledge-base/examples/grid/grid-filtering-api/main.tsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-filtering-api/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-hide-expand-icon-conditionally/app.jsx b/docs/knowledge-base/examples/grid/grid-hide-expand-icon-conditionally/app.jsx deleted file mode 100644 index 88cf4e75..00000000 --- a/docs/knowledge-base/examples/grid/grid-hide-expand-icon-conditionally/app.jsx +++ /dev/null @@ -1,97 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; - -const DetailComponent = (props) => { - const data = props.dataItem.details; - - if (data) { - return ( - - - - - - ); - } - - return ( -
-
-
-
-
- ); -}; - -const App = () => { - const baseUrl = 'https://demos.telerik.com/kendo-ui/service-v4/odata/'; - const init = { - method: 'GET', - accept: 'application/json', - headers: {}, - }; - const [categories, setCategories] = React.useState([]); - - const expandChange = (event) => { - event.dataItem.expanded = event.value; - let categoryID = event.dataItem.CategoryID; - setCategories([...categories]); - - if (!event.value || event.dataItem.details) { - return; - } - - fetch(baseUrl + `Products?$filter=CategoryID%20eq%20` + categoryID, init) - .then((response) => response.json()) - .then((json) => { - let data = categories.slice(); - let index = data.findIndex((d) => d.CategoryID === categoryID); - data[index].details = json.value; - setCategories(data); - }); - }; - - React.useEffect(() => { - fetch(baseUrl + `Categories`, init) - .then((response) => response.json()) - .then((json) => setCategories(json.value)); - }, []); - - const cellRender = (td, props) => { - if (props.field == 'expanded' && props.dataItem.CategoryID == 3) { - return ; - } - return td; - }; - return ( -
- - - - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-hide-expand-icon-conditionally/main.jsx b/docs/knowledge-base/examples/grid/grid-hide-expand-icon-conditionally/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-hide-expand-icon-conditionally/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/app.jsx b/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/app.jsx deleted file mode 100644 index 312f6b8a..00000000 --- a/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/app.jsx +++ /dev/null @@ -1,147 +0,0 @@ -import * as React from 'react'; - - -import { process } from '@progress/kendo-data-query'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { - setGroupIds, - getGroupIds, - setExpandedState, -} from '@progress/kendo-react-data-tools'; - -import products from './products.json'; - -const initialDataState = { - take: 10, - skip: 0, - group: [{ field: 'Category.CategoryName' }], -}; - -const processWithGroups = (data, dataState) => { - const newDataState = process(data, dataState); - - setGroupIds({ data: newDataState.data, group: dataState.group }); - - return newDataState; -}; - -let columns = [ - { - field: 'Category.CategoryName', - title: 'Category Name', - show: false, - }, - { - field: 'ProductID', - title: 'ID', - show: true, - }, - { - field: 'ProductName', - title: 'Product Name', - show: true, - }, - { - field: 'UnitPrice', - title: 'Unit Price', - show: true, - }, -]; - -const App = () => { - const [stateColumns, setStateColumns] = React.useState(columns); - const [dataState, setDataState] = React.useState(initialDataState); - const [resultState, setResultState] = React.useState( - processWithGroups(products, initialDataState) - ); - const [collapsedState, setCollapsedState] = React.useState([]); - - const onDataStateChange = React.useCallback((event) => { - const newDataState = processWithGroups(products, event.dataState); - - if ( - event.dataState.group && - columns.length > event.dataState.group.length - ) { - columns = columns.map((col) => { - col.show = true; - return col; - }); - event.dataState.group.forEach((group) => { - for (let i = 0; i < columns.length; i++) { - if (group.field == columns[i].field) { - console.log(group.field); - columns[i].show = false; - } - } - }); - setStateColumns(columns); - } - - setDataState(event.dataState); - setResultState(newDataState); - }, []); - - const onExpandChange = React.useCallback( - (event) => { - const item = event.dataItem; - - if (item.groupId) { - const collapsedIds = !event.value - ? [...collapsedState, item.groupId] - : collapsedState.filter((groupId) => groupId !== item.groupId); - setCollapsedState(collapsedIds); - } - }, - [collapsedState] - ); - - const onGroupsToggle = React.useCallback(() => { - const dataStateWithoutPaging = processWithGroups(products, { - group: dataState.group, - }); - - setCollapsedState( - collapsedState.length - ? [] - : getGroupIds({ data: dataStateWithoutPaging.data }) - ); - }, [collapsedState, dataState]); - - const newData = setExpandedState({ - data: resultState.data, - collapsedIds: collapsedState, - }); - - return ( - - - - - {stateColumns.map( - (column, idx) => - column.show && ( - - ) - )} - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/main.jsx b/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/products.json b/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/grid-hide-grouped-columns/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/app.jsx b/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/app.jsx deleted file mode 100644 index 0cd1c44f..00000000 --- a/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/app.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react'; -import { saveAs } from '@progress/kendo-file-saver'; -import { - drawDOM, - exportPDF, -} from '@progress/kendo-drawing'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; - -import products from './products.json'; - -class App extends React.Component { - pdfExportComponent; - grid; - - constructor(props) { - super(props); - this.state = { - gridData: products, - creator: 'KendoReact' - }; - } - - render() { - return ( -
-
- -
- - - - - - - - -
- ); - } - - PageTemplate = props => { - console.log(props); - return `
Creator: ${ - this.state.creator - } Watermark
`; - }; - - exportPDFWithMethod = () => { - let gridElement = document.getElementsByClassName('k-grid')[0]; - drawDOM(gridElement, { - paperSize: 'A3', - margin: 100, - template: this.PageTemplate - }) - .then(group => { - return exportPDF(group); - }) - .then(dataUri => { - saveAs(dataUri, 'scene.pdf'); - console.log(dataUri.split(';base64,')[1]); - }); - }; -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/main.jsx b/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/products.json b/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/products.json deleted file mode 100644 index d3ab4ee8..00000000 --- a/docs/knowledge-base/examples/grid/grid-pdf-export-with-watermark/products.json +++ /dev/null @@ -1,155 +0,0 @@ -[ - { - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18.0000, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19.0000, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10.0000, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22.0000, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.3500, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25.0000, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30.0000, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40.0000, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97.0000, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - } -] diff --git a/docs/knowledge-base/examples/grid/grid-progressbar-cell/app.jsx b/docs/knowledge-base/examples/grid/grid-progressbar-cell/app.jsx deleted file mode 100644 index a754326a..00000000 --- a/docs/knowledge-base/examples/grid/grid-progressbar-cell/app.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import products from './products.json'; -import { ProgressBar } from '@progress/kendo-react-progressbars'; -const ProgressCell = (props) => { - if (props.rowType == 'data') { //ensuring that we are not passing the custom cell to group headers if grouping is enabled - let content = ( - - - - ); - //Using the props.render ensures that the cellRender will be called for the custom cell - return props.render - ? props.render.call(undefined, content, props) - : content; - } else { - return null; - } -}; -const App = () => { - return ( - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-progressbar-cell/main.jsx b/docs/knowledge-base/examples/grid/grid-progressbar-cell/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-progressbar-cell/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-progressbar-cell/products.json b/docs/knowledge-base/examples/grid/grid-progressbar-cell/products.json deleted file mode 100644 index d3ab4ee8..00000000 --- a/docs/knowledge-base/examples/grid/grid-progressbar-cell/products.json +++ /dev/null @@ -1,155 +0,0 @@ -[ - { - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18.0000, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19.0000, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10.0000, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22.0000, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.3500, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25.0000, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30.0000, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40.0000, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97.0000, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - } -] diff --git a/docs/knowledge-base/examples/grid/grid-row-colors/alternate-colors/app.jsx b/docs/knowledge-base/examples/grid/grid-row-colors/alternate-colors/app.jsx deleted file mode 100644 index 32df2a58..00000000 --- a/docs/knowledge-base/examples/grid/grid-row-colors/alternate-colors/app.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import products from './shared-products.json'; -const App = () => { - return ( -
- - - - - - - - -
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-row-colors/alternate-colors/main.jsx b/docs/knowledge-base/examples/grid/grid-row-colors/alternate-colors/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-row-colors/alternate-colors/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-row-colors/single-row-color/app.jsx b/docs/knowledge-base/examples/grid/grid-row-colors/single-row-color/app.jsx deleted file mode 100644 index 4a0c08ac..00000000 --- a/docs/knowledge-base/examples/grid/grid-row-colors/single-row-color/app.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from "react"; -import { Grid, GridColumn } from "@progress/kendo-react-grid"; -import products from "./shared-products.json"; -const App = () => { - return ( -
- - - - - - - - -
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-row-colors/single-row-color/main.jsx b/docs/knowledge-base/examples/grid/grid-row-colors/single-row-color/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-row-colors/single-row-color/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-save-datastate-to-localstorage/app.jsx b/docs/knowledge-base/examples/grid/grid-save-datastate-to-localstorage/app.jsx deleted file mode 100644 index 718b8ab5..00000000 --- a/docs/knowledge-base/examples/grid/grid-save-datastate-to-localstorage/app.jsx +++ /dev/null @@ -1,73 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { process } from '@progress/kendo-data-query'; -import products from './shared-products.json'; - -let initialDataState = { - sort: [ - { - field: 'code', - dir: 'asc', - }, - ], - take: 10, - skip: 0, -}; - -const App = () => { - const [dataState, setDataState] = React.useState(initialDataState); - - React.useEffect(() => { - let gridState = localStorage.getItem('gridState'); - if (gridState) { - initialDataState = JSON.parse(gridState); - setDataState(initialDataState); - } - }, []); - - React.useEffect(() => { - localStorage.setItem('gridState', JSON.stringify(dataState)); - }, [dataState]); - - return ( - { - setDataState(e.dataState); - }} - > - - - - - ( - - - - )} - /> - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-save-datastate-to-localstorage/main.jsx b/docs/knowledge-base/examples/grid/grid-save-datastate-to-localstorage/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-save-datastate-to-localstorage/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-search-bar/app.tsx b/docs/knowledge-base/examples/grid/grid-search-bar/app.tsx deleted file mode 100644 index 63282892..00000000 --- a/docs/knowledge-base/examples/grid/grid-search-bar/app.tsx +++ /dev/null @@ -1,197 +0,0 @@ -import * as React from 'react'; - -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { process } from '@progress/kendo-data-query'; -import { sampleProducts } from './sample-products'; -import { Input } from '@progress/kendo-react-inputs'; - -export function getNestedValue(fieldName, dataItem) { - const path = (fieldName || '').split('.'); - let data = dataItem; - path.forEach((p) => { - data = data ? data[p] : undefined; - }); - return data; -} - -function highlightSearchTextInReactChildren(children, searchText) { - function highlightInNode(node) { - if (typeof node === 'string') { - const modifiedContent = node.replace( - new RegExp(`(${searchText})`, 'gi'), - '$1' - ); - if (node !== modifiedContent) { - return ( - - ); - } - } else if (React.isValidElement(node)) { - if (!node.props.children.map) { - return React.cloneElement( - node, - {}, - highlightInNode(node.props.children) - ); - } else { - return React.cloneElement( - node, - {}, - node.props.children?.map((ch) => highlightInNode(ch)) - ); - } - } - return node; - } - return React.Children.map(children, (child) => { - return highlightInNode(child); - }); -} - -const App = () => { - const [filterValue, setFilterValue] = React.useState(); - const [filteredSampleProducts, setFilteredSampleProducts] = - React.useState(sampleProducts); - const [dataState, setDataState] = React.useState({ - skip: 0, - take: 10, - }); - const [dataResult, setDataResult] = React.useState( - process(filteredSampleProducts, dataState) - ); - const dataStateChange = (event) => { - setDataResult(process(filteredSampleProducts, event.dataState)); - setDataState(event.dataState); - }; - const expandChange = (event) => { - const isExpanded = - event.dataItem.expanded === undefined - ? event.dataItem.aggregates - : event.dataItem.expanded; - event.dataItem.expanded = !isExpanded; - setDataResult({ - ...dataResult, - }); - }; - const onFilterChange = (ev) => { - let value = ev.value; - setFilterValue(ev.value); - let newData = sampleProducts.filter((item) => { - let match = false; - for (const property in item) { - if ( - item[property] - .toString() - .toLocaleLowerCase() - .indexOf(value.toLocaleLowerCase()) >= 0 - ) { - match = true; - } - if ( - item[property].toLocaleDateString && - item[property].toLocaleDateString().indexOf(value) >= 0 - ) { - match = true; - } - } - return match; - }); - setFilteredSampleProducts(newData); - let clearedPagerDataState = { - ...dataState, - take: 10, - skip: 0, - }; - let processedData = process(newData, clearedPagerDataState); - setDataResult(processedData); - setDataState(clearedPagerDataState); - }; - - const cellRender = React.useCallback( - (td, props) => { - if (props.rowType === 'data') { - const value = getNestedValue(props.field, props.dataItem)?.toString(); - if (!value) { - return td; - } - if ( - filterValue && - filterValue.length > 0 && - value.toLocaleLowerCase().indexOf(filterValue.toLocaleLowerCase()) >= - 0 - ) { - const children = highlightSearchTextInReactChildren( - td.props.children, - filterValue - ); - return React.cloneElement(td, [props], [children]); - } - } - return td; - }, - [filterValue] - ); - - return ( -
- - -
- - Search:{' '} - - - - -
-
- - - - - -
-
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-search-bar/main.tsx b/docs/knowledge-base/examples/grid/grid-search-bar/main.tsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-search-bar/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-search-bar/sample-products.tsx b/docs/knowledge-base/examples/grid/grid-search-bar/sample-products.tsx deleted file mode 100644 index e91eff6a..00000000 --- a/docs/knowledge-base/examples/grid/grid-search-bar/sample-products.tsx +++ /dev/null @@ -1,1235 +0,0 @@ -export const sampleProducts = [{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "FirstOrderedOn": new Date(), - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "FirstOrderedOn": new Date(), - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}]; diff --git a/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/app.jsx b/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/app.jsx deleted file mode 100644 index f58a75eb..00000000 --- a/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/app.jsx +++ /dev/null @@ -1,89 +0,0 @@ -import * as React from 'react'; - -import { - Grid, - GridColumn as Column, - getSelectedState, -} from '@progress/kendo-react-grid'; -import { getter } from '@progress/kendo-react-common'; -import { useDeviceType } from './isMobile.jsx'; -import products from './shared-products.json'; -const DATA_ITEM_KEY = 'ProductID'; -const SELECTED_FIELD = 'selected'; -const idGetter = getter(DATA_ITEM_KEY); - -const App = () => { - const [dataState, setDataState] = React.useState( - products.map((dataItem) => - Object.assign( - { - selected: false, - }, - dataItem - ) - ) - ); - const [selectedState, setSelectedState] = React.useState({}); - const onSelectionChange = React.useCallback( - (event) => { - const newSelectedState = getSelectedState({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }, - [selectedState] - ); - const onHeaderSelectionChange = React.useCallback((event) => { - const checkboxElement = event.syntheticEvent.target; - const checked = checkboxElement.checked; - const newSelectedState = {}; - event.dataItems.forEach((item) => { - newSelectedState[idGetter(item)] = checked; - }); - setSelectedState(newSelectedState); - }, []); - - return ( -
- ({ - ...item, - [SELECTED_FIELD]: selectedState[idGetter(item)], - }))} - style={{ - height: '400px', - }} - dataItemKey={DATA_ITEM_KEY} - selectedField={SELECTED_FIELD} - selectable={ - useDeviceType() === 'Mobile' || useDeviceType() === 'Tablet' - ? null - : { - enabled: true, - drag: false, - cell: false, - mode: 'multiple', - } - } - onSelectionChange={onSelectionChange} - onHeaderSelectionChange={onHeaderSelectionChange} - > - !selectedState[idGetter(item)]) === -1 - } - /> - - - - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/isMobile.jsx b/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/isMobile.jsx deleted file mode 100644 index d0bc47fd..00000000 --- a/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/isMobile.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useState, useEffect } from 'react'; - -export function useDeviceType() { - const [device, setDevice] = useState(''); - - useEffect(() => { - function handleDeviceDetection() { - const userAgent = navigator.userAgent.toLowerCase(); - const isMobile = /iphone|ipad|ipod|android|windows phone/g.test( - userAgent - ); - const isTablet = - /(ipad|tablet|playbook|silk)|(android(?!.*mobile))/g.test(userAgent); - - if (isMobile) setDevice('Mobile'); - else if (isTablet) setDevice('Tablet'); - else setDevice('Desktop'); - } - - handleDeviceDetection(); - window.addEventListener('resize', handleDeviceDetection); - - return () => window.removeEventListener('resize', handleDeviceDetection); - }, []); - - return device; -} diff --git a/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/main.jsx b/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-selection-mobile-scrolling/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-show-details-in-popover/app.jsx b/docs/knowledge-base/examples/grid/grid-show-details-in-popover/app.jsx deleted file mode 100644 index f59ae0a5..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-details-in-popover/app.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { Popover } from '@progress/kendo-react-tooltip'; - -const GridContext = React.createContext({}); - -const MyCommandCell = (props) => { - const { showPopover } = React.useContext(GridContext); - const { dataItem } = props; - return ( - - - - ); -}; - -const PopoverTemplate = (props) => { - if (props.item) { - return ( -
-
- Unit Price: {props.item.UnitPrice} -
-
Product name: {props.item.ProductName}
-
- ); - } - return 'no data'; -}; - -const testData = [ - { ProductName: 'name', ProductID: 1, UnitPrice: 5 }, - { ProductName: 'name2', ProductID: 2, UnitPrice: 19 }, -]; - -const App = () => { - const [anchor, setAchnor] = React.useState(null); - const [show, setShow] = React.useState(false); - const [popoverItem, setPopoverItem] = React.useState(null); - const [data, setData] = React.useState(testData); - - const showPopover = (dataItem, target) => { - if (show && popoverItem && popoverItem.ProductID == dataItem.ProductID) { - setShow(false); - return; - } - setPopoverItem(dataItem); - setTimeout(() => { - setShow(true); - }); - setAchnor(target); - }; - - return ( -
- - - - - - - - - - -
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-show-details-in-popover/main.jsx b/docs/knowledge-base/examples/grid/grid-show-details-in-popover/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-details-in-popover/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-show-details-in-popover/myCommandCell.jsx b/docs/knowledge-base/examples/grid/grid-show-details-in-popover/myCommandCell.jsx deleted file mode 100644 index efe7c5a8..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-details-in-popover/myCommandCell.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -export const MyCommandCell = (props) => { - const { dataItem } = props; - return ( - - - - ); -}; diff --git a/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/app.jsx b/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/app.jsx deleted file mode 100644 index c6443282..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/app.jsx +++ /dev/null @@ -1,133 +0,0 @@ -import * as React from 'react'; - -import { process } from '@progress/kendo-data-query'; -import { - Grid, - GridColumn as Column, - GridToolbar, -} from '@progress/kendo-react-grid'; -import { - setGroupIds, - getGroupIds, - setExpandedState, -} from '@progress/kendo-react-data-tools'; -import products from './products.json'; -const initialDataState = { - take: 10, - skip: 0, - group: [ - { - field: 'ProductID', - }, - ], -}; - -const processWithGroups = (data, dataState) => { - const newDataState = process(data, dataState); - setGroupIds({ - data: newDataState.data, - group: dataState.group, - }); - return newDataState; -}; - -const findFirstDataItem = (item) => { - if (item.items && item.items.length > 0 && !item.items[0].groupId) { - return item.items[0]; - } else { - return findFirstDataItem(item.items[0]); - } -}; - -const App = () => { - const [dataState, setDataState] = React.useState(initialDataState); - const [resultState, setResultState] = React.useState( - processWithGroups(products, initialDataState) - ); - const [collapsedState, setCollapsedState] = React.useState([]); - const onDataStateChange = React.useCallback((event) => { - const newDataState = processWithGroups(products, event.dataState); - setDataState(event.dataState); - setResultState(newDataState); - }, []); - const onExpandChange = React.useCallback( - (event) => { - const item = event.dataItem; - - if (item.groupId) { - const collapsedIds = !event.value - ? [...collapsedState, item.groupId] - : collapsedState.filter((groupId) => groupId !== item.groupId); - setCollapsedState(collapsedIds); - } - }, - [collapsedState] - ); - const onGroupsToggle = React.useCallback(() => { - const dataStateWithoutPaging = processWithGroups(products, { - group: dataState.group, - }); - setCollapsedState( - collapsedState.length - ? [] - : getGroupIds({ - data: dataStateWithoutPaging.data, - }) - ); - }, [collapsedState, dataState]); - const newData = setExpandedState({ - data: resultState.data, - collapsedIds: collapsedState, - }); - - const cellRender = (td, props) => { - if ( - props.rowType == 'groupHeader' && - props.field == 'value' && - props.dataItem.field == 'ProductID' && - td - ) { - if (td.props.children) { - let children = ( - - {td.props.children.props.children}:{' '} - {findFirstDataItem(props.dataItem).ProductName} - - ); - return React.cloneElement(td, td.props, children); - } - } - return td; - }; - return ( - - - - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/main.jsx b/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/products.json b/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-different-field-in-group/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/app.jsx b/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/app.jsx deleted file mode 100644 index c6c40758..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/app.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import * as React from 'react'; - -import { GridWithFiltering } from './grid-with-filtering'; -import { - NumericTextBoxPropsContext, - InputPropsContext, -} from '@progress/kendo-react-inputs'; -import { DatePickerPropsContext } from '@progress/kendo-react-dateinputs'; -const App = () => { - const numericTextBoxPropsCallback = React.useCallback((props) => { - if (props.ariaLabel == 'Filter') { - return { - ...props, - placeholder: 'Search...', - }; - } else { - return { ...props }; - } - }, []); - - const datePickerPropsCallback = React.useCallback((props) => { - if (props.ariaLabel == 'Filter') { - return { - ...props, - placeholder: 'Search...', - }; - } else { - return { ...props }; - } - }, []); - - React.useEffect(() => { - let filterInputs = document.querySelectorAll( - '.k-filtercell-wrapper .k-textbox .k-input-inner' - ); - if (filterInputs.length > 0) { - filterInputs.forEach((el) => { - el.setAttribute('placeholder', 'Search...'); - }); - } - }, []); - return ( - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/grid-with-filtering.jsx b/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/grid-with-filtering.jsx deleted file mode 100644 index 221dc074..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/grid-with-filtering.jsx +++ /dev/null @@ -1,43 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import { filterBy } from '@progress/kendo-data-query'; -import { sampleProducts } from './sample-products'; -const initialFilter = { - logic: 'and', - filters: [], -}; -export const GridWithFiltering = () => { - const [filter, setFilter] = React.useState(initialFilter); - return ( - setFilter(e.filter)} - > - - - - - - - ); -}; diff --git a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/main.jsx b/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/sample-products.js b/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/sample-products.js deleted file mode 100644 index e06a78e4..00000000 --- a/docs/knowledge-base/examples/grid/grid-show-placeholder-for-filters/sample-products.js +++ /dev/null @@ -1,171 +0,0 @@ -export const sampleProducts = [{ - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - }]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/CSS/app.jsx b/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/CSS/app.jsx deleted file mode 100644 index 10d31c51..00000000 --- a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/CSS/app.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import products from './shared-products.json'; -const App = () => { - return ( -
- - - - - - - - -
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/CSS/main.jsx b/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/CSS/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/CSS/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cell/app.jsx b/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cell/app.jsx deleted file mode 100644 index 8b21243e..00000000 --- a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cell/app.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import products from './shared-products.json'; -const App = () => { - const CellRender = (props) => { - return ( - - {props.dataItem.ProductName} - - ); - }; - return ( - - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cell/main.jsx b/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cell/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cell/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cellRender/app.jsx b/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cellRender/app.jsx deleted file mode 100644 index 51043034..00000000 --- a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cellRender/app.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import products from './shared-products.json'; -const App = () => { - const CellRender = (props) => { - return ( - - {props.props.children} - - ); - }; - return ( - - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cellRender/main.jsx b/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cellRender/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/cellRender/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/shared/products.json b/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/shared/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/grid-whitespace-textoverflow/shared/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/group-header-render/app.jsx b/docs/knowledge-base/examples/grid/group-header-render/app.jsx deleted file mode 100644 index 0349a7e5..00000000 --- a/docs/knowledge-base/examples/grid/group-header-render/app.jsx +++ /dev/null @@ -1,69 +0,0 @@ -import * as React from 'react'; - - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { process } from '@progress/kendo-data-query'; - -import products from './shared-products.json'; - -class App extends React.PureComponent { - state = this.createAppState({ - take: 10, - group: [{ field: 'UnitsInStock' }] - }); - - cellRender = (td, props) => { - if(td && td.props.children && props.rowType === "groupHeader"){ - let children = {td.props.children.props.children} count: {props.dataItem.items.length} - return React.cloneElement(td, td.props, children); - } - return td - } - - render() { - return ( - - - - - - - - ); - } - - createAppState(dataState) { - return { - result: process(products, dataState), - dataState: dataState - }; - } - - dataStateChange = (event) => { - this.setState(this.createAppState(event.data)); - } - - expandChange = (event) => { - event.dataItem[event.target.props.expandField] = event.value; - this.setState({ - result: Object.assign({}, this.state.result), - dataState: this.state.dataState - }); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/group-header-render/cells-header/app.jsx b/docs/knowledge-base/examples/grid/group-header-render/cells-header/app.jsx deleted file mode 100644 index 57d53848..00000000 --- a/docs/knowledge-base/examples/grid/group-header-render/cells-header/app.jsx +++ /dev/null @@ -1,106 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { groupBy } from '@progress/kendo-data-query'; -import { - setExpandedState, - setGroupIds, -} from '@progress/kendo-react-data-tools'; -import products from './shared-products.json'; -const initialGroup = [ - { - field: 'UnitsInStock', - }, - { - field: 'ProductName', - }, -]; -const processWithGroups = (data, group) => { - const newDataState = groupBy(data, group); - setGroupIds({ - data: newDataState, - group: group, - }); - return newDataState; -}; - -const CustomCell = (props) => { - return ( - props.tdProps && ( - - {props.children && ( -

- {props.children.props.children[0]} - {props.dataItem.items.length}:{props.dataItem[props.field]} -

- )} - - ) - ); -}; - -const GroupMyHeaderCustomCell = (props) => ( - -); - -const App = () => { - const [group, setGroup] = React.useState(initialGroup); - const [resultState, setResultState] = React.useState( - processWithGroups(products, initialGroup) - ); - const [collapsedState, setCollapsedState] = React.useState([]); - const onGroupChange = React.useCallback( - (event) => { - const newDataState = processWithGroups(products, event.group); - setGroup(event.group); - setResultState(newDataState); - }, - [group] - ); - const onExpandChange = React.useCallback( - (event) => { - const item = event.dataItem; - if (item.groupId) { - const newCollapsedIds = !event.value - ? [...collapsedState, item.groupId] - : collapsedState.filter((groupId) => groupId !== item.groupId); - setCollapsedState(newCollapsedIds); - } - }, - [collapsedState] - ); - const newData = setExpandedState({ - data: resultState, - collapsedIds: collapsedState, - }); - return ( - - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/group-header-render/cells-header/main.jsx b/docs/knowledge-base/examples/grid/group-header-render/cells-header/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/group-header-render/cells-header/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/group-header-render/main.jsx b/docs/knowledge-base/examples/grid/group-header-render/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/group-header-render/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/grouping-with-custom-cell/app.jsx b/docs/knowledge-base/examples/grid/grouping-with-custom-cell/app.jsx deleted file mode 100644 index 6a875ad9..00000000 --- a/docs/knowledge-base/examples/grid/grouping-with-custom-cell/app.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import * as React from "react"; - -import { Grid, GridColumn as Column } from "@progress/kendo-react-grid"; -import { process } from "@progress/kendo-data-query"; - -import products from "./shared-products.json"; - -const ProductNameCell = ({ dataItem, field, rowType }) => { - if (rowType === "groupHeader") { - return null; - } - return {dataItem[field]}; -}; - -const CategoryNameCell = ({ dataItem, rowType }) => { - if (rowType === "groupHeader") { - return null; - } - return ( - - {dataItem && dataItem.Category && dataItem.Category.CategoryName} - - ); -}; - -class App extends React.PureComponent { - state = this.createAppState({ - take: 10, - group: [{ field: "UnitsInStock" }] - }); - - render() { - return ( - - - - - - - - ); - } - - createAppState(dataState) { - return { - result: process(products, dataState), - dataState: dataState - }; - } - - dataStateChange = event => { - this.setState(this.createAppState(event.data)); - }; - - expandChange = event => { - event.dataItem[event.target.props.expandField] = event.value; - this.setState({ - result: Object.assign({}, this.state.result), - dataState: this.state.dataState - }); - }; -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/grouping-with-custom-cell/main.jsx b/docs/knowledge-base/examples/grid/grouping-with-custom-cell/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/grouping-with-custom-cell/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/ignore-diacritics/app.jsx b/docs/knowledge-base/examples/grid/ignore-diacritics/app.jsx deleted file mode 100644 index 1f5e5f3d..00000000 --- a/docs/knowledge-base/examples/grid/ignore-diacritics/app.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { filterBy } from '@progress/kendo-data-query'; - -import { InputFilterCell } from './inputFilterCell'; -import { sampleProducts } from './shared-sample-products'; -const categories = Array.from( - new Set( - sampleProducts.map((p) => (p.Category ? p.Category.CategoryName : '')) - ) -); - -const App = () => { - const [data, setData] = React.useState(sampleProducts); - const [filter, setFilter] = React.useState(); - const filterChange = (event) => { - setData(filterBy(sampleProducts, event.filter)); - setFilter(event.filter); - }; - return ( - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/ignore-diacritics/inputFilterCell.jsx b/docs/knowledge-base/examples/grid/ignore-diacritics/inputFilterCell.jsx deleted file mode 100644 index ee55e0ed..00000000 --- a/docs/knowledge-base/examples/grid/ignore-diacritics/inputFilterCell.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -import { Input } from '@progress/kendo-react-inputs'; -import { Button } from '@progress/kendo-react-buttons'; - -export const InputFilterCell = (props) => { - let hasValue = (value) => Boolean(value); - const onChange = (event) => { - hasValue = hasValue(event.target.value); - props.onChange({ - value: hasValue - ? event.target.value.normalize('NFD').replace(/[\u0300-\u036f]/g, '') - : '', - operator: hasValue ? 'contains' : '', - syntheticEvent: event.syntheticEvent, - }); - }; - const onClearButtonClick = (event) => { - event.preventDefault(); - props.onChange({ - value: '', - operator: '', - syntheticEvent: event, - }); - }; - return ( -
- -
- ); -}; diff --git a/docs/knowledge-base/examples/grid/ignore-diacritics/main.jsx b/docs/knowledge-base/examples/grid/ignore-diacritics/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/ignore-diacritics/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/limit-numeric-filter-value/app.jsx b/docs/knowledge-base/examples/grid/limit-numeric-filter-value/app.jsx deleted file mode 100644 index 7c8301ee..00000000 --- a/docs/knowledge-base/examples/grid/limit-numeric-filter-value/app.jsx +++ /dev/null @@ -1,174 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { filterBy } from '@progress/kendo-data-query'; -import { NumericTextBox } from '@progress/kendo-react-inputs'; - -import products from './shared-products.json'; - -export const RangeFilterCell = (props) => { - let minTextBox; - let maxTextBox; - - const inRange = (current, { min, max }) => - (min === null || current >= min) && (max === null || current <= max); - - const onChange = (event) => { - props.onChange({ - value: { - min: minTextBox.value, - max: maxTextBox.value, - }, - operator: inRange, - syntheticEvent: event.syntheticEvent, - }); - }; - - const onClearButtonClick = (event) => { - event.preventDefault(); - props.onChange({ - value: null, - operator: '', - syntheticEvent: event, - }); - }; - - const value = props.value || null; - return ( -
- Min: - - { - minTextBox = numeric; - }} - onChange={onChange} - /> - - Max: - - { - maxTextBox = numeric; - }} - onChange={onChange} - /> - - -
- ); -}; - -import { DropDownList } from '@progress/kendo-react-dropdowns'; -export const DropdownFilterCell = (props) => { - let hasValue = (value) => Boolean(value && value !== props.defaultItem); - - const onChange = (event) => { - hasValue = hasValue(event.target.value); - props.onChange({ - value: hasValue ? event.target.value : '', - operator: hasValue ? 'eq' : '', - syntheticEvent: event.syntheticEvent, - }); - }; - - const onClearButtonClick = (event) => { - event.preventDefault(); - props.onChange({ - value: '', - operator: '', - syntheticEvent: event, - }); - }; - - return ( -
- - -
- ); -}; -const categories = Array.from( - new Set( - products.map((p) => (p.Category ? p.Category.CategoryName : '')) - ) -); - -const CategoryFilterCell = (props) => ( - -); - -const App = () => { - const [data, setData] = React.useState(products); - const [filter, setFilter] = React.useState(); - - const filterChange = (event) => { - setData(filterBy(products, event.filter)); - setFilter(event.filter); - }; - - return ( - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/limit-numeric-filter-value/main.jsx b/docs/knowledge-base/examples/grid/limit-numeric-filter-value/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/limit-numeric-filter-value/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/lock-row-headers/app.jsx b/docs/knowledge-base/examples/grid/lock-row-headers/app.jsx deleted file mode 100644 index 5415844f..00000000 --- a/docs/knowledge-base/examples/grid/lock-row-headers/app.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { Button } from '@progress/kendo-react-buttons'; -import products from './shared-products-with-sections.json'; -import { filterBy } from '@progress/kendo-data-query'; - -const rowHeight = 50; - -const App = () => { - const [data, setData] = React.useState(products); - - const cellRender = (td, props) => { - let extraProps = {}; - - if (props.dataItem.locked) { - (extraProps.style = { - top: 0, - ...props.style, - backgroundColor: 'rgb(201 197 197)', - fontWeight: 'bold' - }), - (extraProps.className = props.className + ' k-grid-row-sticky'); - } - - return React.cloneElement( - td, - { ...td.props, ...extraProps }, - td.props.children - ); - }; - - const collapseAll = () => { - let onlyHeaders = filterBy(products, [{field: 'locked', operator: 'eq', value: true}]); - setData(onlyHeaders); - } - - const expandAll = () => { - let allExpanded = filterBy(products, []); - setData(allExpanded); - } - - - return ( -
- - - - - - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/lock-row-headers/main.jsx b/docs/knowledge-base/examples/grid/lock-row-headers/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/lock-row-headers/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/merge-rows-and-cells/app.jsx b/docs/knowledge-base/examples/grid/merge-rows-and-cells/app.jsx deleted file mode 100644 index 4d1a39e1..00000000 --- a/docs/knowledge-base/examples/grid/merge-rows-and-cells/app.jsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useState } from 'react'; -import ReactDOM from 'react-dom'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import products from './products.json'; - -const App = () => { - const [gridData, setGridData] = useState(products); - const gridRef = React.useRef(null); - const cellRender = (cell, props) => { - const { dataItem, field } = props; - let duplicate = false; - if (gridRef.current) { - const rowIndex = props.dataIndex; - const columns = gridRef.current.columns; - const colIndex = columns.findIndex((c) => c.field == props.field); - - if (colIndex > 0) { - if ( - dataItem[columns[colIndex].field] == - dataItem[columns[colIndex - 1].field] - ) { - duplicate = true; - } - } - if (rowIndex > 0) { - if ( - dataItem[props.field] == - gridRef.current.props.data[rowIndex - 1][props.field] - ) { - duplicate = true; - } - } - } - let style = { ...cell.props.style }; - if (typeof dataItem[props.field] == 'boolean') { - style.backgroundColor = dataItem[props.field] ? '#1fb542' : '#b51f2e'; - style.color = dataItem[props.field] ? '#1fb542' : '#b51f2e'; - style.border = 'none'; - } - - if (duplicate) { - return ( - - {' '} - - ); - } else { - return ; - } - }; - return ( -
- - - - - - - - -
- ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/merge-rows-and-cells/main.jsx b/docs/knowledge-base/examples/grid/merge-rows-and-cells/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/merge-rows-and-cells/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/merge-rows-and-cells/products.json b/docs/knowledge-base/examples/grid/merge-rows-and-cells/products.json deleted file mode 100644 index 4730f74a..00000000 --- a/docs/knowledge-base/examples/grid/merge-rows-and-cells/products.json +++ /dev/null @@ -1,143 +0,0 @@ -[ - { - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18.0, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Discontinued2": false, - "CategoryName": "Beverages" - }, - { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19.0, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Discontinued2": false, - "CategoryName": "Beverages" - }, - { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10.0, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Discontinued2": true, - "CategoryName": "Condiments" - }, - { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22.0, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Discontinued2": true, - "CategoryName": "Condiments" - }, - { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Discontinued2": true, - "CategoryName": "Condiments" - }, - { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25.0, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Discontinued2": true, - "CategoryName": "Condiments" - }, - { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30.0, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Discontinued2": false, - "CategoryName": "Produce" - }, - { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40.0, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Discontinued2": true, - "CategoryName": "Condiments" - }, - { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97.0, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Discontinued2": true, - "CategoryName": "Meat/Poultry" - }, - { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31.0, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Discontinued2": false, - "CategoryName": "Seafood" - } - ] - \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/merge-rows/app.jsx b/docs/knowledge-base/examples/grid/merge-rows/app.jsx deleted file mode 100644 index e2edb82b..00000000 --- a/docs/knowledge-base/examples/grid/merge-rows/app.jsx +++ /dev/null @@ -1,159 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; - -import products from './shared-products.json'; - -const updateItem = (item) => { - let index = products.findIndex( - (record) => record.ProductID === item.ProductID - ); - products[index] = item; - return products; -}; - -// dummy test with even odd merged cells -// products.forEach((p) => { -// p.discontinuedCellRowSpan = p.ProductID % 2 !== 0 ? 2 : undefined; -// }); - -// merge cells with the same value in the 'Discontinued' column -let looped = 1; -for (let i = 0; i < products.length; i += looped) { - let rowSpan = 1; - looped = 1; - for (let j = i + 1; j < products.length; j++) { - if (products[i].Discontinued === products[j].Discontinued) { - looped++; - rowSpan++; - } else { - break; - } - } - - // add special property for the 'Discontinued' column cells rowSpan - products[i].discontinuedCellRowSpan = - rowSpan === 1 ? (looped === 1 ? 1 : undefined) : rowSpan; -} - -class App extends React.Component { - state = { - gridData: products, - }; - - getItemIndex = (dataItem) => { - return this.state.gridData.findIndex( - (record) => record.ProductID === dataItem.ProductID - ); - }; - - hoverMergedCellByIndex = (index, hover) => { - let currentIndex = index; - let currentDataItem = this.state.gridData[currentIndex]; - while (!currentDataItem.discontinuedCellRowSpan) { - currentIndex--; - currentDataItem = this.state.gridData[currentIndex]; - } - // add special property for the 'Discontinued' column cells hover - currentDataItem.discontinuedClassName = hover ? 'k-hover' : undefined; - this.update(currentDataItem); - }; - - updateNextItems = (index, count, hover) => { - for (let i = index; i < index + count; i++) { - const dataItem = this.state.gridData[i]; - dataItem.className = hover ? 'k-hover' : undefined; - this.update(dataItem); - } - }; - - handleMergedHover = (dataItem, rowSpanNumber, hover) => { - const index = this.getItemIndex(dataItem); - this.updateNextItems(index, rowSpanNumber, hover); - }; - - handleCellHover = (dataItem, hover) => { - if (dataItem.discontinuedCellRowSpan) { - return; - } - let index = this.getItemIndex(dataItem); - this.hoverMergedCellByIndex(index, hover); - }; - - update = (dataItem) => { - const gridData = updateItem(dataItem); - this.setState({ gridData }); - }; - - cellRender = (cell, props) => { - const { dataItem, field } = props; - - if (field === 'Discontinued') { - if (dataItem.discontinuedCellRowSpan) { - return ( - { - this.handleMergedHover( - dataItem, - dataItem.discontinuedCellRowSpan, - true - ); - }} - onMouseOut={() => { - this.handleMergedHover( - dataItem, - dataItem.discontinuedCellRowSpan, - false - ); - }} - > - {cell.props.children} - - ); - } else if (dataItem.discontinuedCellRowSpan === 1) { - return {cell.props.children}; - } else { - return null; - } - } - return ( - { - this.handleCellHover(props.dataItem, true); - }} - onMouseOut={() => { - this.handleCellHover(props.dataItem, false); - }} - > - {cell.props.children} - - ); - }; - - render() { - return ( -
- - - - - - - - -
- ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/merge-rows/main.jsx b/docs/knowledge-base/examples/grid/merge-rows/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/merge-rows/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/multiple-functionalities/app.jsx b/docs/knowledge-base/examples/grid/multiple-functionalities/app.jsx deleted file mode 100644 index b7a7b399..00000000 --- a/docs/knowledge-base/examples/grid/multiple-functionalities/app.jsx +++ /dev/null @@ -1,120 +0,0 @@ -import * as React from "react"; -import { Grid, GridColumn as Column } from "@progress/kendo-react-grid"; -import { process } from "@progress/kendo-data-query"; -import EditForm from "./editForm.jsx"; - -import products from "./shared-products.json"; - -const EditCommandCell = props => { - return ( - - - - ); -}; - -class App extends React.Component { - state = { - openForm: false, - editItem: {}, - data: [...products], - result: process(products, {}), - dataState: {} - }; - - enterEdit = item => { - this.setState({ - openForm: true, - editItem: item - }); - }; - - handleSubmit = event => { - const newData = this.state.data.map((item, i) => { - if (event.ProductID === item.ProductID) { - item = { ...event }; - } - return item; - }); - this.setState({ - data: newData, - result: process(newData, this.state.dataState), - openForm: false - }); - }; - - handleCancelEdit = () => { - this.setState({ openForm: false }); - }; - - MyEditCommandCell = props => ( - - ); - - render() { - console.log(this.state.result); - - return ( - <> - - - - - - - - - {this.state.openForm && ( - - )} - - ); - } - - dataStateChange = event => { - this.setState({ - result: process(this.state.data, event.dataState), - dataState: event.dataState - }); - }; - - expandChange = event => { - event.dataItem[event.target.props.expandField] = event.value; - this.setState({ - result: Object.assign({}, this.state.result), - dataState: this.state.dataState - }); - }; -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/multiple-functionalities/editForm.jsx b/docs/knowledge-base/examples/grid/multiple-functionalities/editForm.jsx deleted file mode 100644 index 68fb7e7f..00000000 --- a/docs/knowledge-base/examples/grid/multiple-functionalities/editForm.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import * as React from "react"; -import { Dialog } from "@progress/kendo-react-dialogs"; -import { Form, Field, FormElement } from "@progress/kendo-react-form"; -import { Input, NumericTextBox } from "@progress/kendo-react-inputs"; -import { DropDownList } from "@progress/kendo-react-dropdowns"; -import { Error } from "@progress/kendo-react-labels"; -import products from "./shared-products.json"; - -const minValueValidator = value => - value >= 0 ? "" : "The value must be 0 or higher"; -const NonNegativeNumericInput = fieldRenderProps => { - const { validationMessage, visited, ...others } = fieldRenderProps; - return ( -
- - {visited && validationMessage && {validationMessage}} -
- ); -}; - -const EditForm = props => { - return ( - -
( - -
-
- -
-
- -
-
- -
-
-
- - -
-
- )} - /> -
- ); -}; -export default EditForm; diff --git a/docs/knowledge-base/examples/grid/multiple-functionalities/main.jsx b/docs/knowledge-base/examples/grid/multiple-functionalities/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/multiple-functionalities/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/multiple-grid-export-excel/app.jsx b/docs/knowledge-base/examples/grid/multiple-grid-export-excel/app.jsx deleted file mode 100644 index d72bad43..00000000 --- a/docs/knowledge-base/examples/grid/multiple-grid-export-excel/app.jsx +++ /dev/null @@ -1,66 +0,0 @@ - -import * as React from 'react'; - -import { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid'; -import { ExcelExport } from '@progress/kendo-react-excel-export'; - -import products from './shared-products.json'; - -class App extends React.Component { - _export; - export = () => { - const optionsGridOne = this._exportGridOne.workbookOptions(); - const optionsGridTwo = this._exportGridTwo.workbookOptions(); - optionsGridOne.sheets[1] = optionsGridTwo.sheets[0]; - optionsGridOne.sheets[0].title = "First Grid data" - optionsGridOne.sheets[1].title = "Second Grid data" - this._exportGridOne.save(optionsGridOne); - } - render() { - return ( -
- { this._exportGridOne = exporter; }} - > - - - - - - - - - - { this._exportGridTwo = exporter; }} - > - - - - - - - - - -
- ); - } -} - -export default App; - diff --git a/docs/knowledge-base/examples/grid/multiple-grid-export-excel/main.jsx b/docs/knowledge-base/examples/grid/multiple-grid-export-excel/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/multiple-grid-export-excel/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/multiselect-filter-cell/app.jsx b/docs/knowledge-base/examples/grid/multiselect-filter-cell/app.jsx deleted file mode 100644 index 48a79113..00000000 --- a/docs/knowledge-base/examples/grid/multiselect-filter-cell/app.jsx +++ /dev/null @@ -1,60 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { process } from '@progress/kendo-data-query'; -import products from './products.json'; -import MultiSelectFilterCell from './multiSelectFilterCell'; - -const initialDataState = { - sort: [ - { - field: 'code', - dir: 'asc', - }, - ], - take: 10, - skip: 0, -}; - -const categories = Array.from( - new Set(products.map((p) => p.Category.CategoryName)) -); - -const MyMultiSelectFilter = (props) => { - return ; -}; - -const App = () => { - const [dataState, setDataState] = React.useState(initialDataState); - return ( - { - setDataState(e.dataState); - }} - > - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/multiselect-filter-cell/main.jsx b/docs/knowledge-base/examples/grid/multiselect-filter-cell/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/multiselect-filter-cell/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/multiselect-filter-cell/multiSelectFilterCell.jsx b/docs/knowledge-base/examples/grid/multiselect-filter-cell/multiSelectFilterCell.jsx deleted file mode 100644 index 94c45ca8..00000000 --- a/docs/knowledge-base/examples/grid/multiselect-filter-cell/multiSelectFilterCell.jsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react'; - -import { MultiSelect } from '@progress/kendo-react-dropdowns'; - -const hasValue = (value) => { - return value && value.length > 0; -}; - -export default function MultiSelectFilterCell(props) { - const data = [...props.data]; - data.unshift('Not Selected'); - - const multiSelectFilterOperator = (value, current) => { - let newValue = - !value || - !value.length || - value.find((val) => - val === 'Not Selected' && current === null - ? 'isnull' - : value.find((val) => val === current) - ); - return newValue; - }; - const [stateValue, setStateValue] = React.useState( - props.value ? [props.value] : null - ); - React.useEffect(() => { - console.log(stateValue); - }, [stateValue]); - const handleChange = (event) => { - const value = event.target.value; - setStateValue([...value]); - props.onChange({ - value: event.value, - operator: multiSelectFilterOperator.bind(undefined, value), - syntheticEvent: event.syntheticEvent, - }); - }; - - const handleClearClick = (event) => { - event.preventDefault(); - const value = event.target.value; - - setStateValue([]); - props.onChange({ - value: [], - operator: 'eq', - syntheticEvent: event, - }); - }; - return ( -
- - -
- ); -} diff --git a/docs/knowledge-base/examples/grid/multiselect-filter-cell/products.json b/docs/knowledge-base/examples/grid/multiselect-filter-cell/products.json deleted file mode 100644 index e9a52241..00000000 --- a/docs/knowledge-base/examples/grid/multiselect-filter-cell/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/odata-server-operations/app.jsx b/docs/knowledge-base/examples/grid/odata-server-operations/app.jsx deleted file mode 100644 index 9fde1dfd..00000000 --- a/docs/knowledge-base/examples/grid/odata-server-operations/app.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import * as React from 'react'; - - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { ProductsLoader } from './shared-products-loader.jsx'; - -class App extends React.Component { - constructor(props) { - super(props); - this.state = { - products: { data: [], total: 0 }, - dataState: { take: 10, skip: 0 } - }; - } - - dataStateChange = (e) => { - this.setState({ - ...this.state, - dataState: e.dataState - }); - } - - dataReceived = (products) => { - this.setState({ - ...this.state, - products: products - }); - } - - render() { - return ( -
- - - - - - - - -
- ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/odata-server-operations/main.jsx b/docs/knowledge-base/examples/grid/odata-server-operations/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/odata-server-operations/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/paste-from-excel/app.jsx b/docs/knowledge-base/examples/grid/paste-from-excel/app.jsx deleted file mode 100644 index e4b96b02..00000000 --- a/docs/knowledge-base/examples/grid/paste-from-excel/app.jsx +++ /dev/null @@ -1,69 +0,0 @@ -import * as React from "react"; -import * as ReactDOM from "react-dom"; -import { Grid, GridColumn as Column } from "@progress/kendo-react-grid"; - -class App extends React.Component { - state = { - data: [] - }; - - handlePaste = e => { - if (e.target.tagName && e.target.tagName.match(/(input|textarea)/i)) { - // Do not handle past when an input element is currently focused - return; - } - - // Get clipboard data as text - const data = e.clipboardData.getData("text"); - - // Simplified parsing of the TSV data with hard-coded columns - const rows = data.split("\n"); - const result = rows.map(row => { - const cells = row.split("\t"); - return { - ProductID: cells[0], - ProductName: cells[1], - Category: { CategoryName: cells[2] }, - UnitPrice: cells[3], - UnitsInStock: cells[4] - }; - }); - this.setState({ - data: result - }); - }; - - render() { - return ( - <> -
    -
  1. - Select the sample TSV snippet below: -
    -                            {`1	Chai	Beverages	18	39
    -2	Chang	Beverages	19	17
    -3	Aniseed Syrup	Condiments	10	13
    -4	Chef Anton's Cajun Seasoning	Condiments	22	53
    -5	Chef Anton's Gumbo Mix	Condiments	21.35	0
    -6	Grandma's Boysenberry Spread	Condiments	25	120
    -7	Uncle Bob's Organic Dried Pears	Produce	30	15
    -`}
    -                        
    -
  2. -
  3. Click on the Grid and paste it with Ctrl+V or ⌘+V
  4. -
-
- - - - - - - -
- - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/paste-from-excel/main.jsx b/docs/knowledge-base/examples/grid/paste-from-excel/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/paste-from-excel/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/remove-select-all/app.jsx b/docs/knowledge-base/examples/grid/remove-select-all/app.jsx deleted file mode 100644 index 271701f4..00000000 --- a/docs/knowledge-base/examples/grid/remove-select-all/app.jsx +++ /dev/null @@ -1,79 +0,0 @@ -import * as React from 'react'; - -import { - Grid, - GridColumn as Column, - getSelectedState, -} from '@progress/kendo-react-grid'; -import { getter } from '@progress/kendo-react-common'; -import products from './products.json'; -const DATA_ITEM_KEY = 'ProductID'; -const SELECTED_FIELD = 'selected'; -const idGetter = getter(DATA_ITEM_KEY); - -const App = () => { - const [dataState, setDataState] = React.useState( - products.map((dataItem) => - Object.assign( - { - selected: false, - }, - dataItem - ) - ) - ); - const [selectedState, setSelectedState] = React.useState({}); - const onSelectionChange = React.useCallback( - (event) => { - const newSelectedState = getSelectedState({ - event, - selectedState: selectedState, - dataItemKey: DATA_ITEM_KEY, - }); - setSelectedState(newSelectedState); - }, - [selectedState] - ); - - - const headerCellRender = (td, props) => { - if (props.field == SELECTED_FIELD) { - return ; - } - return td; - }; - return ( -
- ({ - ...item, - [SELECTED_FIELD]: selectedState[idGetter(item)], - }))} - style={{ - height: '400px', - }} - headerCellRender={headerCellRender} - dataItemKey={DATA_ITEM_KEY} - selectedField={SELECTED_FIELD} - selectable={{ - enabled: true, - drag: false, - cell: false, - mode: 'multiple', - }} - onSelectionChange={onSelectionChange} - > - - - - - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/remove-select-all/main.jsx b/docs/knowledge-base/examples/grid/remove-select-all/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/remove-select-all/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/remove-select-all/products.json b/docs/knowledge-base/examples/grid/remove-select-all/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/grid/remove-select-all/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/app.jsx b/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/app.jsx deleted file mode 100644 index 02d19dd0..00000000 --- a/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/app.jsx +++ /dev/null @@ -1,100 +0,0 @@ -import * as React from 'react'; - -import { TabStrip, TabStripTab } from '@progress/kendo-react-layout'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import products from './products.json'; - -const App = () => { - const [selected, setSelected] = React.useState(1); - const [gridScrollPosition, setGridScrollPosition] = React.useState(0); - const ROW_HEIGHT = 40; - const handleSelect = (e) => { - setSelected(e.selected); - }; - const onGridScroll = (ev) => { - setGridScrollPosition(ev.nativeEvent.target.scrollTop); - }; - const gridRef = React.useRef(); - React.useEffect(() => { - if (gridRef != undefined) { - let rowIndex = Math.round(gridScrollPosition / ROW_HEIGHT); - gridRef.current.scrollIntoView({ rowIndex: rowIndex }); - } - }, [selected]); - return ( - - -
-

- Paris is the capital and most populous city of France. It has an - area of 105 square kilometres (41 square miles) and a population in - 2013 of 2,229,621 within its administrative limits. The city is both - a commune and department, and forms the centre and headquarters of - the Île-de-France, or Paris Region, which has an area of 12,012 - square kilometres (4,638 square miles) and a population in 2014 of - 12,005,077, comprising 18.2 percent of the population of France. -

-
-
- -
- - - - - - - ( - - - - )} - /> - -
-
- -
-

- Tallinn is the capital and largest city of Estonia. It is situated - on the northern coast of the country, on the shore of the Gulf of - Finland, 80 km (50 mi) south of Helsinki, east of Stockholm and west - of Saint Petersburg. From the 13th century until 1918 (and briefly - during the Nazi occupation of Estonia from 1941 to 1944), the city - was known as Reval. Tallinn occupies an area of 159.2 km2 (61.5 sq - mi) and has a population of 443,894. Approximately 32% of Estonia's - total population lives in Tallinn. -

-

- Tallinn was founded in 1248, but the earliest human settlements are - over 5,000 years old, making it one of the oldest capital cities of - Northern Europe. Due to its strategic location, the city became a - major trade hub, especially from the 14th to the 16th century, when - it grew in importance as part of the Hanseatic League. -

-
-
- -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/main.jsx b/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/products.json b/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/products.json deleted file mode 100644 index 15590fda..00000000 --- a/docs/knowledge-base/examples/grid/save-scroll-position-in-tabstrip/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/grid/show-hide-columns/app.jsx b/docs/knowledge-base/examples/grid/show-hide-columns/app.jsx deleted file mode 100644 index d02927c1..00000000 --- a/docs/knowledge-base/examples/grid/show-hide-columns/app.jsx +++ /dev/null @@ -1,78 +0,0 @@ - -import * as React from "react"; -import { Grid, GridColumn as Column } from "@progress/kendo-react-grid"; - -import products from "./shared-products.json"; - -class App extends React.Component { - state = { - columns: [ - { field: "ProductID", title: "ID", show: false }, - { field: "ProductName", title: "Name", show: true }, - { field: "Category.CategoryName", title: "Category Name", show: true }, - { field: "UnitPrice", title: "Price", show: true }, - { field: "UnitsInStock", title: "In Stock", show: true } - ] - }; - - onChange = props => { - const newState = [...this.state.columns]; - newState.map((c, i) => { - if (c.field == props.currentTarget.id) { - c.show = !c.show; - } - }); - console.log(newState); - this.setState({ columns: newState }); - }; - - render() { - return ( - <> -

Show Columns

- - -
- - -
- - -
- - - {this.state.columns.map((column, i) => { - return ( - column.show && ( - - ) - ); - })} - - - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/show-hide-columns/main.jsx b/docs/knowledge-base/examples/grid/show-hide-columns/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/show-hide-columns/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/show-loading-indicator/app.jsx b/docs/knowledge-base/examples/grid/show-loading-indicator/app.jsx deleted file mode 100644 index 52894e02..00000000 --- a/docs/knowledge-base/examples/grid/show-loading-indicator/app.jsx +++ /dev/null @@ -1,49 +0,0 @@ - -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; - -const loadingPanel = ( -
- Loading -
-
-
-); - - -class App extends React.Component { - state = { - gridData: [] - } - - componentDidMount() { - fetch('https://jsonplaceholder.typicode.com/todos') - .then(response => response.json()) - .then(json => { - this.setState({ - gridData: json - }) - }) - } - - render() { - return ( -
- {this.state.gridData.length === 0 && loadingPanel} - - - - - - -
- ); - } -} - -export default App; - diff --git a/docs/knowledge-base/examples/grid/show-loading-indicator/main.jsx b/docs/knowledge-base/examples/grid/show-loading-indicator/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/show-loading-indicator/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/stateful/app.jsx b/docs/knowledge-base/examples/grid/stateful/app.jsx deleted file mode 100644 index 161f9d9c..00000000 --- a/docs/knowledge-base/examples/grid/stateful/app.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from "react"; -import { withState } from "./with-state"; -import { GridColumn, Grid } from "@progress/kendo-react-grid"; -import products from "./shared-products.json"; - -const StatefulGrid = withState(Grid); - -const App = () => { - const sampleData = [ - { field1: "Chai" }, - { field1: "Chang" }, - { field1: "Aniseed Syrup" }, - { field1: "Longlife Tofu" }, - ]; - - return ( -
- - - - - -
- - - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/stateful/main.jsx b/docs/knowledge-base/examples/grid/stateful/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/stateful/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/stateful/with-state.jsx b/docs/knowledge-base/examples/grid/stateful/with-state.jsx deleted file mode 100644 index a9d75fef..00000000 --- a/docs/knowledge-base/examples/grid/stateful/with-state.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { useState } from "react"; -import { process } from "@progress/kendo-data-query"; - -export const withState = (WrappedGrid) => { - return (props) => { - const [gridState, setGridState] = useState( - props.pageable === false - ? {} - : { skip: 0, take: 10, sort: [], filter: null } - ); - - const onDataStateChange = (event) => { - const updatedState = { - ...gridState, - skip: event.dataState?.skip, - take: event.dataState?.take, - sort: event.dataState?.sort, - filter: event.dataState?.filter, - }; - setGridState(updatedState); - }; - - return ( - - ); - }; -}; diff --git a/docs/knowledge-base/examples/grid/store-columns-width-and-order/app.jsx b/docs/knowledge-base/examples/grid/store-columns-width-and-order/app.jsx deleted file mode 100644 index d1c11970..00000000 --- a/docs/knowledge-base/examples/grid/store-columns-width-and-order/app.jsx +++ /dev/null @@ -1,63 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -const products = [ - { - ProductName: 'Name', - ProductID: 1, - Category: 'Category', - UnitPrice: 10, - UnitsInStock: 2, - }, -]; -let loadedColumns = localStorage.getItem('gridColumns'); -const GridColumns = loadedColumns - ? JSON.parse(loadedColumns) - : [ - //here you can define the initial columns configuration - { field: 'ProductID', width: 200 }, - { field: 'ProductName', width: 200 }, - { field: 'Category', width: 200 }, - { field: 'UnitPrice', width: 200 }, - { field: 'UnitsInStock', width: 200 }, - ]; - -const App = () => { - const [columns, setColumns] = React.useState(GridColumns); - const gridRef = React.useRef(); - - const onColumnReorder = (props) => { - setColumns(props.columns); - saveColumnsState(props.columns); - }; - const onColumnResize = (props) => { - setColumns(props.columns); - saveColumnsState(props.columns); - }; - - const saveColumnsState = (columns) => { - let currentColumnsState = JSON.stringify(columns); - localStorage.setItem('gridColumns', currentColumnsState); - }; - return ( -
- - {columns.map((column, index) => { - return ; - })} - -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/store-columns-width-and-order/main.jsx b/docs/knowledge-base/examples/grid/store-columns-width-and-order/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/store-columns-width-and-order/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/transpose-data/app.jsx b/docs/knowledge-base/examples/grid/transpose-data/app.jsx deleted file mode 100644 index dabf244d..00000000 --- a/docs/knowledge-base/examples/grid/transpose-data/app.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom"; -import { Grid, GridColumn as Column } from "@progress/kendo-react-grid"; - -const data = { - phaseMinimumGreen: [10, 15, 10, 15, 10, 15, 10, 15, 0, 0, 0, 0, 0, 0, 0, 0], - phasePassage: [40, 50, 40, 50, 40, 50, 40, 50, 0, 0, 0, 0, 0, 0, 0, 0], - phaseMaximum1: [25, 35, 25, 35, 25, 35, 25, 35, 0, 0, 0, 0, 0, 0, 0, 0], - phaseMaximum2: [30, 50, 30, 50, 30, 50, 30, 50, 0, 0, 0, 0, 0, 0, 0, 0], - phaseYellowChange: [40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0], - phaseRedClear: [20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0] -}; - -const transformData = data => { - let transposeData = []; - for (let item in data) { - let itemArray = data[item]; - let newItem = { - item - }; - for (let i = 0; i < itemArray.length; i++) { - newItem[i] = itemArray[i]; - } - transposeData.push(newItem); - } - return transposeData; -}; - -class App extends React.Component { - render() { - let parsedData = transformData(data); - return ( - - - - - - - - - - - - - - - - - - - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/grid/transpose-data/main.jsx b/docs/knowledge-base/examples/grid/transpose-data/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/transpose-data/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/unique-groups/app.jsx b/docs/knowledge-base/examples/grid/unique-groups/app.jsx deleted file mode 100644 index d88f26d0..00000000 --- a/docs/knowledge-base/examples/grid/unique-groups/app.jsx +++ /dev/null @@ -1,88 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { groupBy } from '@progress/kendo-data-query'; -import { - setExpandedState, - setGroupIds, -} from '@progress/kendo-react-data-tools'; -import products from './shared-products.json'; -const initialGroup = [ - { - field: 'UnitsInStock', - }, - { - field: 'ProductName', - }, -]; -const processWithGroups = (data, group) => { - const newDataState = groupBy(data, group); - setGroupIds({ - data: newDataState, - group: group, - }); - return newDataState; -}; -const App = () => { - const [group, setGroup] = React.useState(initialGroup); - const [resultState, setResultState] = React.useState( - processWithGroups(products, initialGroup) - ); - const [collapsedState, setCollapsedState] = React.useState([]); - const onGroupChange = React.useCallback( - (event) => { - let groupExists = false; - const newGroup = - event.group.length >= 0 && event.group[event.group.length - 1]; - newGroup && - group.map((g) => { - if (newGroup.field === g.field) { - groupExists = true; - } - }); - - if (!groupExists || event.nativeEvent) { - const newDataState = processWithGroups(products, event.group); - setGroup(event.group); - setResultState(newDataState); - } - }, - [group] - ); - const onExpandChange = React.useCallback( - (event) => { - const item = event.dataItem; - if (item.groupId) { - const newCollapsedIds = !event.value - ? [...collapsedState, item.groupId] - : collapsedState.filter((groupId) => groupId !== item.groupId); - setCollapsedState(newCollapsedIds); - } - }, - [collapsedState] - ); - const newData = setExpandedState({ - data: resultState, - collapsedIds: collapsedState, - }); - return ( - - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/unique-groups/main.jsx b/docs/knowledge-base/examples/grid/unique-groups/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/unique-groups/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/using-fitColumns-method/app.jsx b/docs/knowledge-base/examples/grid/using-fitColumns-method/app.jsx deleted file mode 100644 index f9373411..00000000 --- a/docs/knowledge-base/examples/grid/using-fitColumns-method/app.jsx +++ /dev/null @@ -1,62 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; - -const products = [ - { - ProductID: 1, - ProductName: 'Product name', - Category: { - CategoryName: 'CategoryName 1', - }, - UnitPrice: 18.0, - UnitsInStock: 39, - }, - { - ProductID: 2, - ProductName: 'Some long product name', - Category: { - CategoryName: 'CategoryName 2', - }, - UnitPrice: 18.0, - UnitsInStock: 39, - }, -]; - -const getColumnIDByField = (grid, field) => { - let column = grid.columns.find((col) => col.field == field); - return column ? column.id : ''; -}; - -const App = () => { - const gridRef = React.createRef(); - - React.useEffect(() => { - //using method for finding the column ID by field name (can be modified to search for title or other column property) - let productNameID = getColumnIDByField(gridRef.current, 'ProductName'); - //getting the ID directly from a column from the columns collection - let lastColumnID = - gridRef.current.columns[gridRef.current.columns.length - 1].id; - - gridRef.current.fitColumns([productNameID, lastColumnID]); - }, []); - - return ( - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/grid/using-fitColumns-method/main.jsx b/docs/knowledge-base/examples/grid/using-fitColumns-method/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/using-fitColumns-method/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/virtual-scrolling-pagechange-event/app.jsx b/docs/knowledge-base/examples/grid/virtual-scrolling-pagechange-event/app.jsx deleted file mode 100644 index a8e59849..00000000 --- a/docs/knowledge-base/examples/grid/virtual-scrolling-pagechange-event/app.jsx +++ /dev/null @@ -1,119 +0,0 @@ -import * as React from 'react'; - -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { Skeleton } from '@progress/kendo-react-indicators'; -const App = () => { - const requestInProgress = React.useRef(false); - const pageSize = 20; - const total = 830; - const baseUrl = `https://demos.telerik.com/kendo-ui/service-v4/odata/Orders?$count=true&$top=60&$skip=`; - const init = { - method: 'GET', - accept: 'application/json', - headers: {}, - }; - const [orders, setOrders] = React.useState([]); - const [page, setPage] = React.useState({ - skip: 0, - take: pageSize, - }); - const requestIfNeeded = (skip) => { - for (let i = skip; i < skip + pageSize && i < orders.length; i++) { - if (orders[i].OrderID === undefined) { - // request data only if not already fetched - requestData(skip); - return; - } - } - }; - const requestData = (skipParameter) => { - if (requestInProgress.current) { - // perform only one request at a time - return; - } - requestInProgress.current = true; - const skip = Math.max(skipParameter - pageSize, 0); // request the prev page as well - fetch(baseUrl + skip, init) - .then((response) => response.json()) - .then((json) => { - requestInProgress.current = false; - const data = json['value']; - const newOrders = - orders.length === total - ? [...orders] - : new Array(total).fill({}).map((e, i) => ({ - Index: i, - })); - data.forEach((order, i) => { - newOrders[i + skip] = { - Index: i + skip, - ...order, - }; - }); - setOrders(newOrders); - }); - }; - React.useEffect(() => { - requestIfNeeded(page.skip); - }, [orders]); - React.useEffect(() => { - // request the first page on initial load - requestData(0); - }, []); - - const [gridScrollLeft, setGridScrollLeft] = React.useState(0); - const [gridScrollTop, setGridScrollTop] = React.useState(0); - const pageChange = (event) => { - if (gridScrollLeft != event.nativeEvent.target.scrollLeft) { - //console.log('horizontal scroll'); - setGridScrollLeft(event.nativeEvent.target.scrollLeft); - } - if (gridScrollTop != event.nativeEvent.target.scrollTop) { - //console.log('vertical scroll'); - setGridScrollTop(event.nativeEvent.target.scrollTop); - requestIfNeeded(event.page.skip); - setPage(event.page); - } - }; - const loadingCell = (tdElement, props) => { - const field = props.field || ''; - if (props.dataItem[field] === undefined) { - // shows loading cell if no data - return ( - - {' '} - - - ); - } // default rendering for this cell - - return tdElement; - }; - return ( - - - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/grid/virtual-scrolling-pagechange-event/main.jsx b/docs/knowledge-base/examples/grid/virtual-scrolling-pagechange-event/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/virtual-scrolling-pagechange-event/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/grid/with-tooltip/app.jsx b/docs/knowledge-base/examples/grid/with-tooltip/app.jsx deleted file mode 100644 index 75b88470..00000000 --- a/docs/knowledge-base/examples/grid/with-tooltip/app.jsx +++ /dev/null @@ -1,46 +0,0 @@ -import * as React from 'react'; - -import { Tooltip } from '@progress/kendo-react-tooltip'; -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import products from './shared-products.json'; - -class ProductNameCell extends React.Component { - render() { - return ( - - {this.props.dataItem.ProductName} - - ); - } -} -class ProductNameHeader extends React.Component { - render() { - return ( - - {this.props.title} - {this.props.children} - - ); - } - } -class App extends React.Component { - render() { - return ( -
- - - - - - - - - -
- ); - } -} -export default App; diff --git a/docs/knowledge-base/examples/grid/with-tooltip/main.jsx b/docs/knowledge-base/examples/grid/with-tooltip/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/grid/with-tooltip/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/inputs/inputs-delayed-value-change/app.jsx b/docs/knowledge-base/examples/inputs/inputs-delayed-value-change/app.jsx deleted file mode 100644 index e2071635..00000000 --- a/docs/knowledge-base/examples/inputs/inputs-delayed-value-change/app.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import * as React from 'react'; -import { Input } from '@progress/kendo-react-inputs'; -import { Hint } from '@progress/kendo-react-labels'; - -let delay = 1000; - -const App = () => { - const [value, setValue] = React.useState(''); - const [delayedValue, setDelayedValue] = React.useState(''); - const [lastEntry, setLastEntry] = React.useState(); - const [referenceTime, setReferenceTime] = React.useState(null); - - const handleChange = (e) => { - setValue(e.value); - setLastEntry(new Date()); - setTimeout(() => { - setReferenceTime(new Date()); - }, delay); - }; - - React.useEffect(() => { - if (lastEntry && referenceTime - lastEntry.getTime() > delay) { - setDelayedValue(value); - setLastEntry(null); - } - }, [value, referenceTime]); - - return ( -
- * The delayed value will be changed after a threshold (1 second in this - example) - - - Instant value: {value} - - Delayed value: {delayedValue} -
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/inputs/inputs-delayed-value-change/main.jsx b/docs/knowledge-base/examples/inputs/inputs-delayed-value-change/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/inputs/inputs-delayed-value-change/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/inputs/numerictextbox-clear-value-on-esc-key/app.jsx b/docs/knowledge-base/examples/inputs/numerictextbox-clear-value-on-esc-key/app.jsx deleted file mode 100644 index 1d221bfc..00000000 --- a/docs/knowledge-base/examples/inputs/numerictextbox-clear-value-on-esc-key/app.jsx +++ /dev/null @@ -1,43 +0,0 @@ -import * as React from 'react'; -import { NumericTextBox } from '@progress/kendo-react-inputs'; -import { Label } from '@progress/kendo-react-labels'; -import { FieldWrapper } from '@progress/kendo-react-form'; -const App = () => { - const [value, setValue] = React.useState(null); - const ChangeKilometers = (e) => { - setValue(e.value); - }; - - const numericRef = React.useRef(null); - //Adding event listener for keydown after the component is initialized - React.useEffect(() => { - numericRef.current.element.addEventListener('keydown', (e) => { - if (e.keyCode == '27') { - setTimeout(() => { - setValue(null); - //forcing the visual change by blurring the input - numericRef.current.element.blur(); - numericRef.current.element.focus(); - }); - } - }); - }, []); - return ( -
- - - - -
-
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/inputs/numerictextbox-clear-value-on-esc-key/main.jsx b/docs/knowledge-base/examples/inputs/numerictextbox-clear-value-on-esc-key/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/inputs/numerictextbox-clear-value-on-esc-key/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/inputs/rangeslider-show-value-as-tooltip/app.jsx b/docs/knowledge-base/examples/inputs/rangeslider-show-value-as-tooltip/app.jsx deleted file mode 100644 index 798bd197..00000000 --- a/docs/knowledge-base/examples/inputs/rangeslider-show-value-as-tooltip/app.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; -import { RangeSlider, SliderLabel } from '@progress/kendo-react-inputs'; -const App = () => { - const sliderRef = React.useRef(null); - const [start, setStart] = React.useState(10); - const [end, setEnd] = React.useState(100); - - const onChange = (ev) => { - setStart(ev.value.start); - setEnd(ev.value.end); - }; - - React.useEffect(() => { - let sliderEl = sliderRef.current.element; - let sliderDots = sliderEl.querySelectorAll('.k-slider-track .k-draghandle'); - sliderDots[0].title = start; - sliderDots[1].title = end; - }, [start, setStart, end, setEnd]); - return ( - - {[0, 25, 50, 75, 100].map((perc, i) => ( - - {perc.toString()} - - ))} - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/inputs/rangeslider-show-value-as-tooltip/main.jsx b/docs/knowledge-base/examples/inputs/rangeslider-show-value-as-tooltip/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/inputs/rangeslider-show-value-as-tooltip/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/inputs/rangeslider-slider-dots-title/app.jsx b/docs/knowledge-base/examples/inputs/rangeslider-slider-dots-title/app.jsx deleted file mode 100644 index 05be038d..00000000 --- a/docs/knowledge-base/examples/inputs/rangeslider-slider-dots-title/app.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import * as React from 'react'; -import { RangeSlider, SliderLabel } from '@progress/kendo-react-inputs'; - -const App = () => { - const sliderRef = React.useRef(null); - const [start, setStart] = React.useState(10); - const [end, setEnd] = React.useState(100); - - const onChange = (ev) => { - setStart(ev.value.start); - setEnd(ev.value.end); - }; - - React.useEffect(() => { - let sliderEl = sliderRef.current.element; - let sliderDots = sliderEl.querySelectorAll('.k-slider-track .k-draghandle'); - sliderDots[0].title = start; - sliderDots[1].title = end; - }, [start, setStart, end, setEnd]); - - return ( - - {[0, 25, 50, 75, 100].map((perc, i) => ( - - {perc.toString()} - - ))} - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/inputs/rangeslider-slider-dots-title/main.jsx b/docs/knowledge-base/examples/inputs/rangeslider-slider-dots-title/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/inputs/rangeslider-slider-dots-title/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/inputs/slider-label-single-click/app.jsx b/docs/knowledge-base/examples/inputs/slider-label-single-click/app.jsx deleted file mode 100644 index 0b0d5c15..00000000 --- a/docs/knowledge-base/examples/inputs/slider-label-single-click/app.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; -import { Slider, SliderLabel } from '@progress/kendo-react-inputs'; -const App = () => { - const [value, setValue] = React.useState(7); - const change = (e) => { - setValue(e.value); - }; - const handleClick = (e) => { - setValue(e.target.innerText); - }; - return ( - - - 1 - - - 3 - - - 5 - - - 7 - - - 10 - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/inputs/slider-label-single-click/main.jsx b/docs/knowledge-base/examples/inputs/slider-label-single-click/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/inputs/slider-label-single-click/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/bottomnavigation-change-content/app.jsx b/docs/knowledge-base/examples/layout/bottomnavigation-change-content/app.jsx deleted file mode 100644 index 41f33e1b..00000000 --- a/docs/knowledge-base/examples/layout/bottomnavigation-change-content/app.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; -import { BottomNavigation } from '@progress/kendo-react-layout'; -import { DropDownList } from '@progress/kendo-react-dropdowns'; -const content = [ - { - text: 'Home', - icon: 'home', - selected: true, - }, - { - text: 'Library', - icon: 'folder', - }, - { - text: 'Search', - icon: 'search', - }, -]; - -const Home = () => { - return
Home content
; -}; - -const Library = () => { - return
Library content
; -}; - -const Search = () => { - return
Search content
; -}; - -const NavigationData = [, , ]; -const App = () => { - const [selectedIndex, setSelectedIndex] = React.useState( - content.findIndex((x) => x.selected === true) - ); - const handleSelect = (e) => { - setSelectedIndex(e.itemIndex); - }; - return ( -
-
-
-
{NavigationData[selectedIndex]}
- ({ - ...item, - selected: index === selectedIndex, - }))} - onSelect={handleSelect} - /> -
-
-
- ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/layout/bottomnavigation-change-content/main.jsx b/docs/knowledge-base/examples/layout/bottomnavigation-change-content/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/bottomnavigation-change-content/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/drawer-close-on-click/app.jsx b/docs/knowledge-base/examples/layout/drawer-close-on-click/app.jsx deleted file mode 100644 index 67ae054d..00000000 --- a/docs/knowledge-base/examples/layout/drawer-close-on-click/app.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import * as React from 'react'; -import { Drawer, DrawerContent } from '@progress/kendo-react-layout'; -import './styles.css'; -const items = [ - { - text: 'Inbox', - icon: 'k-i-inbox', - selected: true, - }, - { - text: 'Calendar', - icon: 'k-i-calendar', - }, - { - text: 'Attachments', - icon: 'k-i-hyperlink-email', - }, - { - text: 'Favourites', - icon: 'k-i-star-outline', - }, -]; -const App = () => { - const [expanded, setExpanded] = React.useState(true); - const [selectedId, setSelectedId] = React.useState( - items.findIndex((x) => x.selected === true) - ); - const handleClick = () => { - setExpanded((prevState) => !prevState); - }; - const handleSelect = (ev) => { - setSelectedId(ev.itemIndex); - //setExpanded(false); - }; - - React.useEffect(() => { - document.addEventListener('mousedown', (e) => { - if (!document.querySelector('.k-drawer').contains(e.target)) { - setExpanded(false); - } - }); - }, []); - - return ( - ({ - ...item, - selected: index === selectedId, - }))} - onSelect={handleSelect} - > - - - - - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/layout/drawer-close-on-click/main.jsx b/docs/knowledge-base/examples/layout/drawer-close-on-click/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/drawer-close-on-click/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/drawer-close-on-click/styles.css b/docs/knowledge-base/examples/layout/drawer-close-on-click/styles.css deleted file mode 100644 index 91018769..00000000 --- a/docs/knowledge-base/examples/layout/drawer-close-on-click/styles.css +++ /dev/null @@ -1,13 +0,0 @@ -my-app { padding: 0 !important; } - -.k-drawer-content { - padding: 20px; -} -.k-drawer-container { - position: fixed; - width: 100%; - height: 100%; -} -.k-drawer-item { - user-select: none; -} diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/About.jsx b/docs/knowledge-base/examples/layout/drawer-router-v6/About.jsx deleted file mode 100644 index 8cf324f9..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/About.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as React from 'react'; -const text =
-

- So cuffed therefore by some sadistically mallard rewrote yet accommodatingly more - cat adequate pesky far this dear fitting and groundhog horse some selfish jeepers juggled - about since upheld heatedly well much. -

-

- Therefore falcon usefully crab during onto hello regally rat wiped misread reluctant unlike - iguanodon fish far bald abjectly far chameleon more scurrilous gagged virtuously sufficient - arrogant cobra froze dog waywardly staunch thus consoled. -

-

- Amphibious darn well densely far meanly inanimately incoherent away flamingo outside yet jeez - that yawned secret evasive dear overrode rat cow one overpaid far hatchet much. -

-

- Had aerial well well coasted darn chuckled studied underlay fatally the but among because - patient or shook depending much sloth wetted cheered some bee. -

-

- Bombastically yikes some coquettish erroneously in therefore disgracefully glanced some - connected and goodness more read marvelous up one rebukingly darn fuzzily. -

-

- Meadowlark and hence regarding flaunting amongst steadfastly demurely like far and stiffly - bled reluctant alongside jeez this save opposite well and this shuddered and smoked wherever - condescendingly hey onto much. -

-

- Hello gosh gosh up effortlessly valiant hotly less rubbed gerbil and ouch inside fatuous - suitably far fuzzily unihibitedly locked froze timidly hello much revealed lorikeet lantern - this much one and far decidedly. -

-
; - -const About = props => { - return
-

About

- {props.children ? props.children : text} -
; -}; - -export default About; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/DrawerContainer.jsx b/docs/knowledge-base/examples/layout/drawer-router-v6/DrawerContainer.jsx deleted file mode 100644 index ec9d1c76..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/DrawerContainer.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import * as React from 'react'; -import { useLocation, useNavigate } from 'react-router-dom'; -import { Drawer, DrawerContent } from '@progress/kendo-react-layout'; -import { Button } from '@progress/kendo-react-buttons'; - -const items = [ - { - text: 'Home', - selected: true, - route: '/', - }, - { - text: 'Products', - route: '/products', - }, - { - text: 'About', - route: '/about', - }, -]; - -const DrawerContainer = (props) => { - const navigate = useNavigate(); - const location = useLocation(); - const [expanded, setExpanded] = React.useState(true); - - const handleClick = () => { - setExpanded(!expanded); - }; - - const onSelect = (e) => { - navigate(e.itemTarget.props.route); - }; - - const setSelectedItem = (pathName) => { - let currentPath = items.find((item) => item.route === pathName); - - if (currentPath.text) { - return currentPath.text; - } - }; - - const selected = setSelectedItem(location.pathname); - - return ( -
-
-
- ({ - ...item, - selected: item.text === selected, - }))} - onSelect={onSelect} - > - {props.children} - -
- ); -}; - -export default DrawerContainer; diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/Home.jsx b/docs/knowledge-base/examples/layout/drawer-router-v6/Home.jsx deleted file mode 100644 index 66083200..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/Home.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import * as React from 'react'; -const text = ( -
-

- However engaging wherever growled much methodic shamefully more human - agreeable gracefully and less equitable insistent gasped that when wasp - baboon rebuilt more slept stingily along knew llama. -

-

- Prim crud far healthy wholesomely more far chortled ouch in adroitly - gawked affably reasonably manfully reindeer mysteriously overpaid - considering far far until. -

-

- Red-handed off thickly save aboard mawkishly that amidst moth pending - jerkily monogamous some much or creatively indecent neat far jeepers up - spoiled about. -

-

- Owing desperate like one shark or bit yikes up so thus grumbled gosh more - bawled much and regardless hey far bought through crud well staunchly - hysteric inside incorrect the closed. -

-

- Industrious jubilant blanched bestially yet that less far far a wow the - militant preparatory crudely acrimonious under a towards lemur wedded that - while decorously this peered darn a much. -

-

- Dizzy boundless hence but because moodily and alas a truculently less - hardheaded so on ambiguously incompetently less moaned hilarious until one - jeepers amid heinously. -

-

- Where beneath less misspelled across artistically spiteful jeepers much - more that when blushed a much a this groundhog therefore far arduous - dependent much satanic where dear goodness hummingbird. -

-
-); - -const Home = (props) => { - return ( -
-

Home page

- {props.children ? props.children : text} -
- ); -}; - -export default Home; diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/Products.jsx b/docs/knowledge-base/examples/layout/drawer-router-v6/Products.jsx deleted file mode 100644 index f0158de8..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/Products.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -const text =
-

- Inclusive and foolishly more on yikes far one vociferous squinted lied much the howled disagreed - yet seal needlessly vulgarly far moistly wanton. -

-

- Human and some barring roadrunner behind swore hello ebulliently pending less upon amiable less - amiably dear harsh telepathic regarding hey poignant ahead. -

-

- Immensely a that gosh accurately by naughtily patted laxly far pangolin ouch this like marvelous - bitter crab jeez after unobtrusive flamboyant octopus. -

-

- So koala that ouch and much porpoise falcon from and wasp curtly crud much more frequently and - accidental beneath during far. -

-
; - -const Products = props => { - return
-

Products

- {props.children ? props.children : text} -
; -}; - -export default Products; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/Team.jsx b/docs/knowledge-base/examples/layout/drawer-router-v6/Team.jsx deleted file mode 100644 index 78ce753a..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/Team.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import * as React from 'react'; -const text =
-

- Leapt sprang volubly that or adroitly cozy sold creepy shuffled spent flirted withdrew gosh zebra - prideful swung yawned monkey penguin. -

-

- This wow flinched one immoral this dear far inflexible newt far outside up hey excluding goodness - hello much after feverishly direly fitted wow some youthful crud stark more strict unjustifiable - that told one. -

-

- Shark audible mistook removed tryingly much delicate yet sudden after contrary thus brusque more - won wallaby frowningly much censorious spryly thanks circuitous this sewed dreamed wow. -

-

- The against alas less adoringly some cutting aboard lighted some dear agilely and enticingly before - thanks upon was neglectful merrily some porpoise tenably and and groundhog together kiwi much barked - miser. -

-

- Much flamingo mocking much far far some since among ritually since crud near one tartly left far and - far this ineffectively goodness mighty some and intricately far. -

-

- Modestly mastodon hypocritically hatchet gerbil successful dispassionate nefariously and - the dangerously far in one less save gosh became and sparing that by alas. -

-
; - -const Team = props => { - return
-

Team

- {props.children ? props.children : text} -
; -}; - -export default Team; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/app.jsx b/docs/knowledge-base/examples/layout/drawer-router-v6/app.jsx deleted file mode 100644 index 63514efa..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/app.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import * as React from 'react'; -import { Router, BrowserRouter, Routes, Route } from 'react-router-dom'; -import About from './About'; -import Home from './Home'; -import Products from './Products'; -import DrawerContainer from './DrawerContainer'; -import './styles.css'; - -const App = () => { - return ( - - - - - } /> - } /> - } /> - - - - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/main.jsx b/docs/knowledge-base/examples/layout/drawer-router-v6/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/drawer-router-v6/styles.css b/docs/knowledge-base/examples/layout/drawer-router-v6/styles.css deleted file mode 100644 index b104f402..00000000 --- a/docs/knowledge-base/examples/layout/drawer-router-v6/styles.css +++ /dev/null @@ -1,35 +0,0 @@ -my-app { padding: 0 !important; } - -.k-drawer-container { - position: fixed; - width: 100%; - height: 100%; -} -.k-drawer-item { - user-select: none; -} -.k-icon { - font-size: 20px; -} -.title { - margin-left: 20px; - font-weight: bold; - font-size: 17px; -} -.custom-toolbar { - width: 100%; - background-color: #f6f6f6; - line-height: 10px; - border-bottom: inset; - border-bottom-width: 1px; - padding: 3px 8px; - color: #656565; -} -.k-drawer-container { - position: fixed; - width: 100%; - height: 100%; -} -.k-drawer-content { - padding: 10px; -} diff --git a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/About.jsx b/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/About.jsx deleted file mode 100644 index b8932d9c..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/About.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import * as React from 'react'; -const text =
-

- So cuffed therefore by some sadistically mallard rewrote yet accommodatingly more - cat adequate pesky far this dear fitting and groundhog horse some selfish jeepers juggled - about since upheld heatedly well much. -

-

- Therefore falcon usefully crab during onto hello regally rat wiped misread reluctant unlike - iguanodon fish far bald abjectly far chameleon more scurrilous gagged virtuously sufficient - arrogant cobra froze dog waywardly staunch thus consoled. -

-

- Amphibious darn well densely far meanly inanimately incoherent away flamingo outside yet jeez - that yawned secret evasive dear overrode rat cow one overpaid far hatchet much. -

-

- Had aerial well well coasted darn chuckled studied underlay fatally the but among because - patient or shook depending much sloth wetted cheered some bee. -

-

- Bombastically yikes some coquettish erroneously in therefore disgracefully glanced some - connected and goodness more read marvelous up one rebukingly darn fuzzily. -

-

- Meadowlark and hence regarding flaunting amongst steadfastly demurely like far and stiffly - bled reluctant alongside jeez this save opposite well and this shuddered and smoked wherever - condescendingly hey onto much. -

-

- Hello gosh gosh up effortlessly valiant hotly less rubbed gerbil and ouch inside fatuous - suitably far fuzzily unihibitedly locked froze timidly hello much revealed lorikeet lantern - this much one and far decidedly. -

-
; -const About = props => { - return
-

About

- {props.children ? props.children : text} -
; -}; -export default About; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Home.jsx b/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Home.jsx deleted file mode 100644 index 4873340f..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Home.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import * as React from 'react'; -const text =
-

- However engaging wherever growled much methodic shamefully more human agreeable gracefully and - less equitable insistent gasped that when wasp baboon rebuilt more slept stingily along knew llama. -

-

- Prim crud far healthy wholesomely more far chortled ouch in adroitly gawked affably reasonably - manfully reindeer mysteriously overpaid considering far far until. -

-

- Red-handed off thickly save aboard mawkishly that amidst moth pending jerkily monogamous some much - or creatively indecent neat far jeepers up spoiled about. -

-

- Owing desperate like one shark or bit yikes up so thus grumbled gosh more bawled much and regardless - hey far bought through crud well staunchly hysteric inside incorrect the closed. -

-

- Industrious jubilant blanched bestially yet that less far far a wow the militant preparatory - crudely acrimonious under a towards lemur wedded that while decorously this peered darn a much. -

-

- Dizzy boundless hence but because moodily and alas a truculently less hardheaded so on ambiguously - incompetently less moaned hilarious until one jeepers amid heinously. -

-

- Where beneath less misspelled across artistically spiteful jeepers much more that when blushed a - much a this groundhog therefore far arduous dependent much satanic where dear goodness hummingbird. -

-
; -const Home = props => { - return
-

Home page

- {props.children ? props.children : text} -
; -}; -export default Home; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/PanelBarNavContainer.jsx b/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/PanelBarNavContainer.jsx deleted file mode 100644 index ae1c4524..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/PanelBarNavContainer.jsx +++ /dev/null @@ -1,92 +0,0 @@ -import * as React from 'react'; -import { PanelBar, PanelBarItem } from '@progress/kendo-react-layout'; -import { useNavigate } from 'react-router'; - -export const withRouter = (Component) =>{ - const Wrapper = (props) =>{ - const history = useNavigate(); - return - } - return Wrapper; -} - -const CustomPanelBarItem = (props) => { - return ( - <> - - {props.title} - - - ); -}; -const paths = [ - { - path: '/', - index: '.0', - }, - { - path: '/products', - index: '.1', - }, - { - path: '/about', - index: '.2', - }, - { - path: '/about/team', - index: '.2.0', - }, -]; -const PanelBarNavContainer = (props) => { - const onSelect = (event) => { - props.history.push(event.target.props.route); - }; - const setSelectedIndex = (pathName) => { - let currentPath = paths.find((item) => item.path === pathName); - return currentPath.index; - }; - const selected = setSelectedIndex(props.location.pathname); - return ( -
-
- - } - route="/" - /> - } - route="/products" - /> - } - route="/about" - > - - - -
-
- {props.children} -
-
- ); -}; -export default withRouter(PanelBarNavContainer); diff --git a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Products.jsx b/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Products.jsx deleted file mode 100644 index ec0823a1..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Products.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import * as React from 'react'; -const text =
-

- Inclusive and foolishly more on yikes far one vociferous squinted lied much the howled disagreed - yet seal needlessly vulgarly far moistly wanton. -

-

- Human and some barring roadrunner behind swore hello ebulliently pending less upon amiable less - amiably dear harsh telepathic regarding hey poignant ahead. -

-

- Immensely a that gosh accurately by naughtily patted laxly far pangolin ouch this like marvelous - bitter crab jeez after unobtrusive flamboyant octopus. -

-

- So koala that ouch and much porpoise falcon from and wasp curtly crud much more frequently and - accidental beneath during far. -

-
; -const Products = props => { - return
-

Products

- {props.children ? props.children : text} -
; -}; -export default Products; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Team.jsx b/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Team.jsx deleted file mode 100644 index 49d33417..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/Team.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -const text =
-

- Leapt sprang volubly that or adroitly cozy sold creepy shuffled spent flirted withdrew gosh zebra - prideful swung yawned monkey penguin. -

-

- This wow flinched one immoral this dear far inflexible newt far outside up hey excluding goodness - hello much after feverishly direly fitted wow some youthful crud stark more strict unjustifiable - that told one. -

-

- Shark audible mistook removed tryingly much delicate yet sudden after contrary thus brusque more - won wallaby frowningly much censorious spryly thanks circuitous this sewed dreamed wow. -

-

- The against alas less adoringly some cutting aboard lighted some dear agilely and enticingly before - thanks upon was neglectful merrily some porpoise tenably and and groundhog together kiwi much barked - miser. -

-

- Much flamingo mocking much far far some since among ritually since crud near one tartly left far and - far this ineffectively goodness mighty some and intricately far. -

-

- Modestly mastodon hypocritically hatchet gerbil successful dispassionate nefariously and - the dangerously far in one less save gosh became and sparing that by alas. -

-
; -const Team = props => { - return
-

Team

- {props.children ? props.children : text} -
; -}; -export default Team; \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/app.jsx b/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/app.jsx deleted file mode 100644 index 55253d3a..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/app.jsx +++ /dev/null @@ -1,25 +0,0 @@ - -import * as React from 'react'; -import { HashRouter, Routes, Route } from 'react-router-dom'; -import About from './About'; -import Team from './Team'; -import Home from './Home'; -import Products from './Products'; -import PanelBarNavContainer from './PanelBarNavContainer'; - -const App = () => { - return ( - - - - - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/main.jsx b/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-open-in-new-window/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/panelbar-render-button-in-panelbaritem/app.jsx b/docs/knowledge-base/examples/layout/panelbar-render-button-in-panelbaritem/app.jsx deleted file mode 100644 index 502bedff..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-render-button-in-panelbaritem/app.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; -import { PanelBar, PanelBarItem } from '@progress/kendo-react-layout'; - -const MyTitle = (props) => { - return ( - - {props.title} - - - - - ); -}; - -const App = () => { - const [count, setCount] = React.useState(1); - - const addButtonClick = (e) => { - //prevent the propagation of the click event, so the PanelBarItem does not get selected or expanded/collapsed - e.preventDefault(); - e.stopPropagation(); - setCount(count + 1); - }; - return ( - -
  • Count: {count}
  • -
  • - - } - > - {">> Content"} - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/layout/panelbar-render-button-in-panelbaritem/main.jsx b/docs/knowledge-base/examples/layout/panelbar-render-button-in-panelbaritem/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/panelbar-render-button-in-panelbaritem/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/tabstrip-button-in-tabs/app.jsx b/docs/knowledge-base/examples/layout/tabstrip-button-in-tabs/app.jsx deleted file mode 100644 index 179de258..00000000 --- a/docs/knowledge-base/examples/layout/tabstrip-button-in-tabs/app.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import * as React from 'react'; -import { TabStrip, TabStripTab } from '@progress/kendo-react-layout'; - -const App = () => { - const [selected, setSelected] = React.useState(-1); - - const handleSelect = (e) => { - console.log('Select'); - setSelected(e.selected); - }; - const buttonClick = (e) => { - e.preventDefault(); - e.stopPropagation(); - console.log('Button clicked'); - }; - const FirstTab = (props) => { - return ( -
    - Tab 1 title -
    - ); - }; - return ( - - }> -

    Tab 1 Content

    -
    - -

    Tab 2 Content

    -
    - -

    Tab 3 Content

    -
    -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/layout/tabstrip-button-in-tabs/main.jsx b/docs/knowledge-base/examples/layout/tabstrip-button-in-tabs/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/tabstrip-button-in-tabs/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/app.jsx b/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/app.jsx deleted file mode 100644 index ef7c5988..00000000 --- a/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/app.jsx +++ /dev/null @@ -1,62 +0,0 @@ -import * as React from 'react'; - -import { TabStrip, TabStripTab } from '@progress/kendo-react-layout'; -import './styles.css'; - -const App = () => { - const [selected, setSelected] = React.useState(2); - - const handleSelect = (e) => { - setSelected(e.selected); - }; - - return ( -
    - - -

    Tab 1 Content

    -
    - -

    Tab 2 Content

    -
    - -

    Tab 3 Content

    -
    - -

    Tab 4 Content

    -
    - -

    Tab 5 Content

    -
    -
    - - - -

    Tab 1 Content

    -
    - -

    Tab 2 Content

    -
    - -

    Tab 3 Content

    -
    - -

    Tab 4 Content

    -
    - -

    Tab 5 Content

    -
    -
    -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/main.jsx b/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/styles.css b/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/styles.css deleted file mode 100644 index 12fd207a..00000000 --- a/docs/knowledge-base/examples/layout/tabstrip-scrollbar-for-tabs/styles.css +++ /dev/null @@ -1,14 +0,0 @@ -.myCustomTabStrip { - width: 500px; - overflow-x: scroll; - } - - .myCustomTabStrip2 { - width: 500px; - } - .myCustomTabStrip2 .k-tabstrip-items-wrapper { - overflow-x: scroll; - overflow-y: hidden; - height: 60px; - } - \ No newline at end of file diff --git a/docs/knowledge-base/examples/layout/tilelayout-adapt-rowspan-content-dynamically/app.jsx b/docs/knowledge-base/examples/layout/tilelayout-adapt-rowspan-content-dynamically/app.jsx deleted file mode 100644 index 4f395aec..00000000 --- a/docs/knowledge-base/examples/layout/tilelayout-adapt-rowspan-content-dynamically/app.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import * as React from "react"; -import { TileLayout } from "@progress/kendo-react-layout"; -import { Grid } from "@progress/kendo-react-grid"; -import products from "./shared-products.json"; -const initialDataState = { - skip: 0, - take: 10, -}; -const App = () => { - const [data, setData] = React.useState([ - { - col: 1, - colSpan: 3, - rowSpan: 3, - }, - ]); - - const rowHeight = 200; - - const calculateRowSpan = (contentHeight) => { - const minHeight = Math.max(contentHeight, rowHeight); - return Math.ceil(minHeight / rowHeight); - }; - - const adjustRowSpanBasedOnContent = () => { - const gridElement = document.querySelector(".k-grid"); - const contentHeight = gridElement ? gridElement.clientHeight : 0; - const newRowSpan = calculateRowSpan(contentHeight); - - setData((prevData) => - prevData.map((item, index) => - index === 0 ? { ...item, rowSpan: newRowSpan } : item - ) - ); - }; - - React.useEffect(() => { - adjustRowSpanBasedOnContent(); - }, [products]); - - const [page, setPage] = React.useState(initialDataState); - const [pageSizeValue, setPageSizeValue] = React.useState(); - const pageChange = (event) => { - const targetEvent = event.targetEvent; - const take = - targetEvent.value === "All" ? products.length : event.page.take; - if (targetEvent.value) { - setPageSizeValue(targetEvent.value); - } - setPage({ - ...event.page, - take, - }); - }; - const tiles = [ - { - header: "Page Views", - body: ( - - ), - }, - ]; - const handleReposition = (e) => { - setData(e.value); - console.log(e.value); - }; - return ( - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/layout/tilelayout-adapt-rowspan-content-dynamically/main.jsx b/docs/knowledge-base/examples/layout/tilelayout-adapt-rowspan-content-dynamically/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/layout/tilelayout-adapt-rowspan-content-dynamically/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/listbox/listbox-keyboard-navigation/app.jsx b/docs/knowledge-base/examples/listbox/listbox-keyboard-navigation/app.jsx deleted file mode 100644 index 8e9fa890..00000000 --- a/docs/knowledge-base/examples/listbox/listbox-keyboard-navigation/app.jsx +++ /dev/null @@ -1,187 +0,0 @@ -import * as React from 'react'; -import { - ListBox, - ListBoxToolbar, - processListBoxData, - processListBoxDragAndDrop, -} from '@progress/kendo-react-listbox'; -const data = [ - { - name: 'Steven White', - selected: true, - }, - { - name: 'Nancy King', - selected: false, - }, - { - name: 'Nancy Davolio', - selected: false, - }, - { - name: 'Robert Davolio', - selected: false, - }, - { - name: 'Michael Leverling', - selected: false, - }, - { - name: 'Andrew Callahan', - selected: false, - }, - { - name: 'Michael Suyama', - selected: false, - }, -]; -const SELECTED_FIELD = 'selected'; -const App = () => { - const [state, setState] = React.useState({ - employees: data, - developers: [], - draggedItem: {}, - }); - const [selectedIndex, setSelectedIndex] = React.useState(0); - const updateState = (selectedIndex, newData) => { - setSelectedIndex(selectedIndex); - setState({ ...state, employees: newData }); - }; - const keyChange = (e) => { - let newSelectedIndex; - const newData = state.employees; - if (e.key === 'ArrowDown') { - newSelectedIndex = selectedIndex + 1; - if (newSelectedIndex < newData.length) { - newData[newSelectedIndex - 1].selected = false; - newData[newSelectedIndex].selected = true; - updateState(newSelectedIndex, newData); - } - } - if (e.key === 'ArrowUp') { - newSelectedIndex = selectedIndex - 1; - if (newSelectedIndex >= 0) { - if (newSelectedIndex + 1 < newData.length) { - newData[newSelectedIndex + 1].selected = false; - } - newData[newSelectedIndex].selected = true; - updateState(newSelectedIndex, newData); - } - } - if (e.key === 'Enter') { - handleToolBarClick('', 'transferTo'); - newData[selectedIndex].selected = false; - } - }; - - const handleItemClick = (event, data, connectedData) => { - setState({ - ...state, - [data]: state[data].map((item, index) => { - if (item.name === event.dataItem.name) { - setSelectedIndex(index); - item[SELECTED_FIELD] = !item[SELECTED_FIELD]; - } else if (!event.nativeEvent.ctrlKey) { - item[SELECTED_FIELD] = false; - } - return item; - }), - [connectedData]: state[connectedData].map((item) => { - item[SELECTED_FIELD] = false; - return item; - }), - }); - }; - const handleToolBarClick = (e, tool) => { - let toolName = e.toolName || tool; - let result = processListBoxData( - state.employees, - state.developers, - toolName, - SELECTED_FIELD - ); - setState({ - ...state, - employees: result.listBoxOneData, - developers: result.listBoxTwoData, - }); - }; - const handleDragStart = (e) => { - setState({ - ...state, - draggedItem: e.dataItem, - }); - }; - const handleDrop = (e) => { - let result = processListBoxDragAndDrop( - state.employees, - state.developers, - state.draggedItem, - e.dataItem, - 'name' - ); - setState({ - ...state, - employees: result.listBoxOneData, - developers: result.listBoxTwoData, - }); - }; - return ( -
    -
    -
    -
    Employees
    -
    - handleItemClick(e, 'employees', 'developers')} - onDragStart={handleDragStart} - onDrop={handleDrop} - toolbar={() => { - return ( - - ); - }} - /> -
    -
    -
    -
    Developers
    - handleItemClick(e, 'developers', 'employees')} - onDragStart={handleDragStart} - onDrop={handleDrop} - /> -
    -
    -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/listbox/listbox-keyboard-navigation/main.jsx b/docs/knowledge-base/examples/listbox/listbox-keyboard-navigation/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/listbox/listbox-keyboard-navigation/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/listbox/show-drag-clue/app.jsx b/docs/knowledge-base/examples/listbox/show-drag-clue/app.jsx deleted file mode 100644 index b9842cd4..00000000 --- a/docs/knowledge-base/examples/listbox/show-drag-clue/app.jsx +++ /dev/null @@ -1,99 +0,0 @@ -import * as React from 'react'; -import { - ListBox, - processListBoxDragAndDrop, -} from '@progress/kendo-react-listbox'; -import products from './products.json'; -import './styles.css'; - -const clearClue = () => { - const clueEl = document.querySelector('.listbox-clue'); - if (clueEl) { - clueEl.className = clueEl.className.replace(' listbox-clue', ''); - } - const clueEl2 = document.querySelector('.listbox-clue-top'); - if (clueEl2) { - clueEl2.className = clueEl2.className.replace(' listbox-clue-top', ''); - } -}; -const App = () => { - const [state, setState] = React.useState({ - notDiscontinued: products.filter((product) => !product.Discontinued), - discontinued: products.filter((product) => product.Discontinued), - draggedItem: {}, - }); - const handleDragStart = (e) => { - setState({ - ...state, - draggedItem: e.dataItem, - targetID: e.target.props.id, - }); - }; - const handleDrop = (e) => { - clearClue(); - let result = processListBoxDragAndDrop( - state.notDiscontinued, - state.discontinued, - state.draggedItem, - e.dataItem, - 'ProductID' - ); - setState({ - ...state, - notDiscontinued: result.listBoxOneData, - discontinued: result.listBoxTwoData, - }); - }; - const handleDragOver = (e) => { - clearClue(); - const target = e.syntheticEvent.currentTarget; - let indexDrag = e.target.props.data.indexOf(state.draggedItem); - let indexTarget = e.target.props.data.indexOf(e.dataItem); - if (e.target.props.id == state.targetID && indexDrag > indexTarget) { - target.className = target.className + ' listbox-clue-top'; - } else { - target.className = target.className + ' listbox-clue'; - } - }; - - return ( -
    -
    -
    - KendoReact ListBox Left Arrow Image -
    - - - KendoReact ListBox Right Arrow Image -
    -
    -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/listbox/show-drag-clue/main.jsx b/docs/knowledge-base/examples/listbox/show-drag-clue/main.jsx deleted file mode 100644 index 094c6a5d..00000000 --- a/docs/knowledge-base/examples/listbox/show-drag-clue/main.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render( - - - - ); \ No newline at end of file diff --git a/docs/knowledge-base/examples/listbox/show-drag-clue/products.json b/docs/knowledge-base/examples/listbox/show-drag-clue/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/listbox/show-drag-clue/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/listbox/show-drag-clue/styles.css b/docs/knowledge-base/examples/listbox/show-drag-clue/styles.css deleted file mode 100644 index 7e31a6ec..00000000 --- a/docs/knowledge-base/examples/listbox/show-drag-clue/styles.css +++ /dev/null @@ -1,7 +0,0 @@ -.listbox-clue { - border-bottom: 1px solid red; - } - .listbox-clue-top { - border-top: 1px solid red; - } - \ No newline at end of file diff --git a/docs/knowledge-base/examples/listview/listview-grouping/app.jsx b/docs/knowledge-base/examples/listview/listview-grouping/app.jsx deleted file mode 100644 index 125126b4..00000000 --- a/docs/knowledge-base/examples/listview/listview-grouping/app.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import * as React from 'react'; -import { ListView } from '@progress/kendo-react-listview'; -import products from './products.json'; -import { groupBy } from '@progress/kendo-data-query'; - -const MyItemRender = (props) => { - let groupItemItem = props.dataItem; - let items = groupItemItem.items; - let groupName = groupItemItem.value; - return ( - -
    - {"= " + groupName} -
    -
    - {items.map((item) => { - return ( -
    - {item.ProductName} -
    - ); - })} -
    -
    - ); -}; -const App = () => { - return ( -
    - -
    - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/listview/listview-grouping/main.jsx b/docs/knowledge-base/examples/listview/listview-grouping/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/listview/listview-grouping/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/listview/listview-grouping/products.json b/docs/knowledge-base/examples/listview/listview-grouping/products.json deleted file mode 100644 index 99b253d6..00000000 --- a/docs/knowledge-base/examples/listview/listview-grouping/products.json +++ /dev/null @@ -1,1234 +0,0 @@ - -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/localization/use-variable-in-messages/Chooser.jsx b/docs/knowledge-base/examples/localization/use-variable-in-messages/Chooser.jsx deleted file mode 100644 index c4bab2f8..00000000 --- a/docs/knowledge-base/examples/localization/use-variable-in-messages/Chooser.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -export const Chooser = props => { - return
    - -
    ; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/localization/use-variable-in-messages/Message.jsx b/docs/knowledge-base/examples/localization/use-variable-in-messages/Message.jsx deleted file mode 100644 index cee5610b..00000000 --- a/docs/knowledge-base/examples/localization/use-variable-in-messages/Message.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -import { useLocalization } from '@progress/kendo-react-intl'; -export const Message = (props) => { - const localization = useLocalization(); - return ( - - {localization.toLanguageString(props.messageKey, props.defaultMessage)} - - ); -}; diff --git a/docs/knowledge-base/examples/localization/use-variable-in-messages/MyLocalizationProvider.jsx b/docs/knowledge-base/examples/localization/use-variable-in-messages/MyLocalizationProvider.jsx deleted file mode 100644 index 9c175c2d..00000000 --- a/docs/knowledge-base/examples/localization/use-variable-in-messages/MyLocalizationProvider.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import { - LocalizationProvider, - LocalizationService, - } from '@progress/kendo-react-intl'; - - import { messages } from './messages'; - - const fillTemplate = (templateString, templateVars) => { - return new Function('return `' + templateString + '`;').call(templateVars); - }; - - export default class MyLocalizationProvider extends LocalizationProvider { - constructor(language, contextParameters) { - super(language, contextParameters); - this.language = language; - this.contextParameters = this.props.contextParameters; - } - getLocalizationService() { - return new MyLocalizationService({ - language: this.props.language, - contextParameters: this.props.contextParameters, - }); - } - } - - export class MyLocalizationService extends LocalizationService { - constructor(props) { - super(props); - this.language = props.language; - this.contextParameters = props.contextParameters; - } - toLanguageString(key, defaultValue) { - if ( - this.language && - messages[this.language] && - messages[this.language].hasOwnProperty(key) - ) { - return fillTemplate(messages[this.language][key], this.contextParameters); - } else { - return fillTemplate(defaultValue, this.contextParameters); - } - } - } - \ No newline at end of file diff --git a/docs/knowledge-base/examples/localization/use-variable-in-messages/app.jsx b/docs/knowledge-base/examples/localization/use-variable-in-messages/app.jsx deleted file mode 100644 index d8774d3d..00000000 --- a/docs/knowledge-base/examples/localization/use-variable-in-messages/app.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import * as React from 'react'; -import { useLocalization, loadMessages } from '@progress/kendo-react-intl'; -import { Chooser } from './Chooser'; -import { - messages, - todaysMessages, - yesterdaysMessageKey, - tomorrowsMessageKey, -} from './messages'; -import { Message } from './Message'; -//Extended LocalizationProvider for handling ${variable} syntax within messages -import MyLocalizationProvider from './MyLocalizationProvider'; - -const App = () => { - //State variable that will be used within the messages - const [userName, setUserName] = React.useState('some user name'); - const [language, setLanguage] = React.useState('en'); - const languages = ['en', 'es', 'bg']; - - const defaultMessages = { - [yesterdaysMessageKey]: 'Yesterday was a good day!', - [todaysMessages]: - 'Today is a good day as well! Some count: ${this.userName}', - [tomorrowsMessageKey]: 'Tomorrow will be even better!', - }; - - loadMessages(messages['es'], 'es'); - loadMessages(messages['bg'], 'bg'); - - const handleChange = React.useCallback((event) => { - setLanguage(event.target.value); - }, []); - - return ( -
    - - - -
    - - - -
    -
    -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/localization/use-variable-in-messages/main.jsx b/docs/knowledge-base/examples/localization/use-variable-in-messages/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/localization/use-variable-in-messages/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/localization/use-variable-in-messages/messages.js b/docs/knowledge-base/examples/localization/use-variable-in-messages/messages.js deleted file mode 100644 index bb85fa69..00000000 --- a/docs/knowledge-base/examples/localization/use-variable-in-messages/messages.js +++ /dev/null @@ -1,15 +0,0 @@ -export const todaysMessages = 'today'; -export const yesterdaysMessageKey = 'yesterday'; -export const tomorrowsMessageKey = 'tomorrow'; -export const messages = { - bg: { - [yesterdaysMessageKey]: 'Вчера беше чудесен ден!', - [todaysMessages]: 'Днес е страхотен ден също! ${this.userName}', - [tomorrowsMessageKey]: 'Утре ще бъде още по-хубаво!', - }, - es: { - [yesterdaysMessageKey]: 'Ayer fue un buen dia!', - [todaysMessages]: 'Hoy es un buen día también! ${this.userName}', - [tomorrowsMessageKey]: 'Mañana será aún mejor!', - }, -}; diff --git a/docs/knowledge-base/examples/map/add-shape-titles/app.tsx b/docs/knowledge-base/examples/map/add-shape-titles/app.tsx deleted file mode 100644 index 4b7007c9..00000000 --- a/docs/knowledge-base/examples/map/add-shape-titles/app.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import * as React from 'react'; -import { Element, Surface, ShapeOptions, Text } from '@progress/kendo-drawing'; -import { - Map, - MapLayers, - MapShapeLayer, - MapTileLayer, - ShapeCreatedEvent, - TileUrlTemplateArgs -} from '@progress/kendo-react-map'; - -import shapes from './shapes.json'; - -const center = [47.4599, -100.5908]; -const zoom = 6; - -const tileSubdomains = ['a', 'b', 'c']; -const tileUrl = (e: TileUrlTemplateArgs) => `https://${e.subdomain}.tile.openstreetmap.org/${e.zoom}/${e.x}/${e.y}.png`; -const attribution = '© OpenStreetMap contributors'; - -const shapeStyle: ShapeOptions = { - fill: { - opacity: 0.75 - } -}; - -const shapeCreated = (e: ShapeCreatedEvent) => { - const title = e.dataItem.properties.abbrev; - drawTitle(e.shape, title, e.layer.surface); -} - -const drawTitle = (shape: Element, title: string, surface: Surface) => { - // Calculate the shape bounding box. - const bbox = shape.bbox(); - const center = bbox.center(); - - // Create the label. - const label = new Text(title, [0, 0]); - const labelCenter = label.bbox().center(); - - // Position the label. - label.position([ - center.x - labelCenter.x, - center.y - labelCenter.y - ]); - - // Render the label on the layer surface. - surface.draw(label); -} - -const App = () => ( - - - - - - -); - -export default App; diff --git a/docs/knowledge-base/examples/map/add-shape-titles/main.tsx b/docs/knowledge-base/examples/map/add-shape-titles/main.tsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/map/add-shape-titles/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/map/add-shape-titles/shapes.json b/docs/knowledge-base/examples/map/add-shape-titles/shapes.json deleted file mode 100644 index 29a589ed..00000000 --- a/docs/knowledge-base/examples/map/add-shape-titles/shapes.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "id": "USA-ND", - "properties": { - "name": "North Dakota", - "abbrev": "ND" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -97.228743, - 49.000239 - ], - [ - -97.097296, - 48.682577 - ], - [ - -97.16302, - 48.545653 - ], - [ - -97.130158, - 48.140359 - ], - [ - -97.053481, - 47.948667 - ], - [ - -96.856311, - 47.609096 - ], - [ - -96.823449, - 46.968294 - ], - [ - -96.785111, - 46.924479 - ], - [ - -96.801542, - 46.656109 - ], - [ - -96.719387, - 46.437031 - ], - [ - -96.598895, - 46.332969 - ], - [ - -96.560556, - 45.933153 - ], - [ - -104.047534, - 45.944106 - ], - [ - -104.042057, - 47.861036 - ], - [ - -104.047534, - 49.000239 - ], - [ - -97.228743, - 49.000239 - ] - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/docs/knowledge-base/examples/map/custom-bubble-symbols/app.tsx b/docs/knowledge-base/examples/map/custom-bubble-symbols/app.tsx deleted file mode 100644 index 032c6efc..00000000 --- a/docs/knowledge-base/examples/map/custom-bubble-symbols/app.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import * as React from 'react'; -import { Path } from '@progress/kendo-drawing'; -import { - Map, - MapLayers, - MapBubbleLayer, - MapTileLayer, - BubbleLayerSymbolArgs, - TileUrlTemplateArgs -} from '@progress/kendo-react-map'; - -import urbanAreas from './urban-areas.json'; - -const center = [40, 40]; -const zoom = 4; - -const tileSubdomains = ['a', 'b', 'c']; -const tileUrl = (e: TileUrlTemplateArgs) => `https://${e.subdomain}.tile.openstreetmap.org/${e.zoom}/${e.x}/${e.y}.png`; -const attribution = '© OpenStreetMap contributors'; - -const drawLine = (map: Map) => (args: BubbleLayerSymbolArgs) => { - // Bubble location - const location = args.location; - - // Find locations 100km west and east of center. - // Actual distance can be bound to args.dataItem fields - const l1 = location.destination(100000, 270); - const l2 = location.destination(100000, 90); - - // Get the view (screen) coordinates for the locations. - const p1 = map.locationToView(l1); - const p2 = map.locationToView(l2); - - // Draw the lines. - const path = new Path({ - stroke: { - width: 2, - color: 'red' - } - }); - - path.moveTo(p1).lineTo(p2); - - return path; -}; - -const App = () => { - const map = React.useRef(null); - const lineSymbol = (args: BubbleLayerSymbolArgs) => { - return drawLine(map.current)(args); - }; - - return ( - - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/map/custom-bubble-symbols/main.tsx b/docs/knowledge-base/examples/map/custom-bubble-symbols/main.tsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/map/custom-bubble-symbols/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/map/custom-bubble-symbols/urban-areas.json b/docs/knowledge-base/examples/map/custom-bubble-symbols/urban-areas.json deleted file mode 100644 index 1d6f1031..00000000 --- a/docs/knowledge-base/examples/map/custom-bubble-symbols/urban-areas.json +++ /dev/null @@ -1,15343 +0,0 @@ -[ - { - "City": "Sofia", - "Country": "Bulgaria", - "Country_ISO3": "BGR", - "Pop1950": 520, - "Pop1955": 620, - "Pop1960": 710, - "Pop1965": 810, - "Pop1970": 890, - "Pop1975": 980, - "Pop1980": 1070, - "Pop1985": 1180, - "Pop1990": 1190, - "Pop1995": 1170, - "Pop2000": 1130, - "Pop2005": 1170, - "Pop2010": 1180, - "Pop2015": 1210, - "Pop2020": 1230, - "Pop2025": 1240, - "Pop2050": 1236, - "Location": [ - 42.7, - 23.33 - ] - }, - { - "City": "Mandalay", - "Country": "Myanmar", - "Country_ISO3": "MMR", - "Pop1950": 170, - "Pop1955": 200, - "Pop1960": 250, - "Pop1965": 310, - "Pop1970": 370, - "Pop1975": 440, - "Pop1980": 500, - "Pop1985": 560, - "Pop1990": 640, - "Pop1995": 720, - "Pop2000": 810, - "Pop2005": 920, - "Pop2010": 960, - "Pop2015": 1030, - "Pop2020": 1170, - "Pop2025": 1310, - "Pop2050": 1446, - "Location": [ - 21.97, - 96.08 - ] - }, - { - "City": "Nay Pyi Taw", - "Country": "Myanmar", - "Country_ISO3": "MMR", - "Pop1950": 0, - "Pop1955": 0, - "Pop1960": 0, - "Pop1965": 0, - "Pop1970": 0, - "Pop1975": 0, - "Pop1980": 0, - "Pop1985": 0, - "Pop1990": 0, - "Pop1995": 0, - "Pop2000": 0, - "Pop2005": 60, - "Pop2010": 930, - "Pop2015": 1020, - "Pop2020": 1180, - "Pop2025": 1320, - "Pop2050": 1461, - "Location": [ - 19.75, - 96.1 - ] - }, - { - "City": "Yangon", - "Country": "Myanmar", - "Country_ISO3": "MMR", - "Pop1950": 1300, - "Pop1955": 1440, - "Pop1960": 1590, - "Pop1965": 1760, - "Pop1970": 1950, - "Pop1975": 2150, - "Pop1980": 2380, - "Pop1985": 2630, - "Pop1990": 2910, - "Pop1995": 3210, - "Pop2000": 3550, - "Pop2005": 3930, - "Pop2010": 4090, - "Pop2015": 4350, - "Pop2020": 4840, - "Pop2025": 5360, - "Pop2050": 5869, - "Location": [ - 16.87, - 96.12 - ] - }, - { - "City": "Minsk", - "Country": "Belarus", - "Country_ISO3": "BLR", - "Pop1950": 280, - "Pop1955": 410, - "Pop1960": 550, - "Pop1965": 720, - "Pop1970": 930, - "Pop1975": 1120, - "Pop1980": 1320, - "Pop1985": 1470, - "Pop1990": 1610, - "Pop1995": 1650, - "Pop2000": 1700, - "Pop2005": 1780, - "Pop2010": 1800, - "Pop2015": 1850, - "Pop2020": 1880, - "Pop2025": 1880, - "Pop2050": 1883, - "Location": [ - 53.89, - 27.57 - ] - }, - { - "City": "Phnum Pénh", - "Country": "Cambodia", - "Country_ISO3": "KHM", - "Pop1950": 360, - "Pop1955": 380, - "Pop1960": 390, - "Pop1965": 440, - "Pop1970": 900, - "Pop1975": 100, - "Pop1980": 240, - "Pop1985": 430, - "Pop1990": 620, - "Pop1995": 840, - "Pop2000": 1160, - "Pop2005": 1360, - "Pop2010": 1470, - "Pop2015": 1650, - "Pop2020": 2030, - "Pop2025": 2460, - "Pop2050": 2911, - "Location": [ - 11.56, - 104.91 - ] - }, - { - "City": "El Djazaïr", - "Country": "Algeria", - "Country_ISO3": "DZA", - "Pop1950": 520, - "Pop1955": 620, - "Pop1960": 870, - "Pop1965": 1050, - "Pop1970": 1250, - "Pop1975": 1500, - "Pop1980": 1620, - "Pop1985": 1670, - "Pop1990": 1910, - "Pop1995": 2300, - "Pop2000": 2750, - "Pop2005": 3200, - "Pop2010": 3350, - "Pop2015": 3570, - "Pop2020": 3920, - "Pop2025": 4240, - "Pop2050": 4499, - "Location": [ - 36.78, - 3.05 - ] - }, - { - "City": "Wahran", - "Country": "Algeria", - "Country_ISO3": "DZA", - "Pop1950": 270, - "Pop1955": 290, - "Pop1960": 300, - "Pop1965": 320, - "Pop1970": 380, - "Pop1975": 470, - "Pop1980": 540, - "Pop1985": 600, - "Pop1990": 650, - "Pop1995": 680, - "Pop2000": 710, - "Pop2005": 760, - "Pop2010": 800, - "Pop2015": 850, - "Pop2020": 940, - "Pop2025": 1030, - "Pop2050": 1105, - "Location": [ - 35.74, - -0.52 - ] - }, - { - "City": "Douala", - "Country": "Cameroon", - "Country_ISO3": "CMR", - "Pop1950": 100, - "Pop1955": 120, - "Pop1960": 150, - "Pop1965": 200, - "Pop1970": 300, - "Pop1975": 430, - "Pop1980": 570, - "Pop1985": 740, - "Pop1990": 930, - "Pop1995": 1160, - "Pop2000": 1430, - "Pop2005": 1770, - "Pop2010": 1910, - "Pop2015": 2110, - "Pop2020": 2420, - "Pop2025": 2720, - "Pop2050": 2996, - "Location": [ - 4.13, - 9.7 - ] - }, - { - "City": "Yaoundé", - "Country": "Cameroon", - "Country_ISO3": "CMR", - "Pop1950": 30, - "Pop1955": 50, - "Pop1960": 80, - "Pop1965": 110, - "Pop1970": 180, - "Pop1975": 290, - "Pop1980": 420, - "Pop1985": 580, - "Pop1990": 750, - "Pop1995": 950, - "Pop2000": 1190, - "Pop2005": 1490, - "Pop2010": 1610, - "Pop2015": 1790, - "Pop2020": 2060, - "Pop2025": 2310, - "Pop2050": 2549, - "Location": [ - 3.86, - 11.51 - ] - }, - { - "City": "Calgary", - "Country": "Canada", - "Country_ISO3": "CAN", - "Pop1950": 130, - "Pop1955": 190, - "Pop1960": 260, - "Pop1965": 320, - "Pop1970": 390, - "Pop1975": 460, - "Pop1980": 570, - "Pop1985": 660, - "Pop1990": 740, - "Pop1995": 810, - "Pop2000": 950, - "Pop2005": 1060, - "Pop2010": 1110, - "Pop2015": 1180, - "Pop2020": 1260, - "Pop2025": 1300, - "Pop2050": 1345, - "Location": [ - 51.03, - -114.04 - ] - }, - { - "City": "Edmonton", - "Country": "Canada", - "Country_ISO3": "CAN", - "Pop1950": 160, - "Pop1955": 230, - "Pop1960": 320, - "Pop1965": 390, - "Pop1970": 480, - "Pop1975": 540, - "Pop1980": 620, - "Pop1985": 760, - "Pop1990": 830, - "Pop1995": 860, - "Pop2000": 920, - "Pop2005": 1020, - "Pop2010": 1060, - "Pop2015": 1110, - "Pop2020": 1170, - "Pop2025": 1220, - "Pop2050": 1256, - "Location": [ - 53.55, - -113.5 - ] - }, - { - "City": "Montréal", - "Country": "Canada", - "Country_ISO3": "CAN", - "Pop1950": 1340, - "Pop1955": 1650, - "Pop1960": 2030, - "Pop1965": 2370, - "Pop1970": 2680, - "Pop1975": 2790, - "Pop1980": 2820, - "Pop1985": 2900, - "Pop1990": 3150, - "Pop1995": 3300, - "Pop2000": 3470, - "Pop2005": 3600, - "Pop2010": 3680, - "Pop2015": 3780, - "Pop2020": 3910, - "Pop2025": 4010, - "Pop2050": 4108, - "Location": [ - 45.54, - -73.65 - ] - }, - { - "City": "Ottawa-Gatineau", - "Country": "Canada", - "Country_ISO3": "CAN", - "Pop1950": 280, - "Pop1955": 340, - "Pop1960": 420, - "Pop1965": 480, - "Pop1970": 580, - "Pop1975": 680, - "Pop1980": 730, - "Pop1985": 800, - "Pop1990": 920, - "Pop1995": 990, - "Pop2000": 1080, - "Pop2005": 1120, - "Pop2010": 1140, - "Pop2015": 1180, - "Pop2020": 1230, - "Pop2025": 1270, - "Pop2050": 1315, - "Location": [ - 45.37, - -75.65 - ] - }, - { - "City": "Toronto", - "Country": "Canada", - "Country_ISO3": "CAN", - "Pop1950": 1070, - "Pop1955": 1360, - "Pop1960": 1740, - "Pop1965": 2090, - "Pop1970": 2540, - "Pop1975": 2770, - "Pop1980": 3010, - "Pop1985": 3360, - "Pop1990": 3810, - "Pop1995": 4200, - "Pop2000": 4610, - "Pop2005": 5040, - "Pop2010": 5210, - "Pop2015": 5450, - "Pop2020": 5690, - "Pop2025": 5830, - "Pop2050": 5946, - "Location": [ - 43.72, - -79.41 - ] - }, - { - "City": "Vancouver", - "Country": "Canada", - "Country_ISO3": "CAN", - "Pop1950": 560, - "Pop1955": 590, - "Pop1960": 620, - "Pop1965": 840, - "Pop1970": 1040, - "Pop1975": 1150, - "Pop1980": 1250, - "Pop1985": 1360, - "Pop1990": 1560, - "Pop1995": 1790, - "Pop2000": 1960, - "Pop2005": 2090, - "Pop2010": 2150, - "Pop2015": 2220, - "Pop2020": 2310, - "Pop2025": 2380, - "Pop2050": 2444, - "Location": [ - 49.27, - -122.96 - ] - }, - { - "City": "N'Djaména", - "Country": "Chad", - "Country_ISO3": "TCD", - "Pop1950": 20, - "Pop1955": 40, - "Pop1960": 70, - "Pop1965": 110, - "Pop1970": 160, - "Pop1975": 230, - "Pop1980": 320, - "Pop1985": 390, - "Pop1990": 480, - "Pop1995": 580, - "Pop2000": 710, - "Pop2005": 900, - "Pop2010": 990, - "Pop2015": 1130, - "Pop2020": 1400, - "Pop2025": 1750, - "Pop2050": 2172, - "Location": [ - 12.1, - 15.24 - ] - }, - { - "City": "Santiago", - "Country": "Chile", - "Country_ISO3": "CHL", - "Pop1950": 1320, - "Pop1955": 1620, - "Pop1960": 1980, - "Pop1965": 2290, - "Pop1970": 2650, - "Pop1975": 3140, - "Pop1980": 3720, - "Pop1985": 4200, - "Pop1990": 4620, - "Pop1995": 4960, - "Pop2000": 5280, - "Pop2005": 5600, - "Pop2010": 5720, - "Pop2015": 5880, - "Pop2020": 6080, - "Pop2025": 6220, - "Pop2050": 6310, - "Location": [ - -33.43, - -70.65 - ] - }, - { - "City": "Valparaíso", - "Country": "Chile", - "Country_ISO3": "CHL", - "Pop1950": 330, - "Pop1955": 380, - "Pop1960": 430, - "Pop1965": 480, - "Pop1970": 530, - "Pop1975": 580, - "Pop1980": 640, - "Pop1985": 680, - "Pop1990": 730, - "Pop1995": 770, - "Pop2000": 800, - "Pop2005": 840, - "Pop2010": 850, - "Pop2015": 880, - "Pop2020": 920, - "Pop2025": 960, - "Pop2050": 982, - "Location": [ - -33.02, - -71.55 - ] - }, - { - "City": "Anshan, Liaoning", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 480, - "Pop1955": 600, - "Pop1960": 750, - "Pop1965": 920, - "Pop1970": 1000, - "Pop1975": 1080, - "Pop1980": 1180, - "Pop1985": 1300, - "Pop1990": 1440, - "Pop1995": 1500, - "Pop2000": 1550, - "Pop2005": 1610, - "Pop2010": 1640, - "Pop2015": 1700, - "Pop2020": 1860, - "Pop2025": 2030, - "Pop2050": 2167, - "Location": [ - 41.11, - 122.97 - ] - }, - { - "City": "Anshun", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 190, - "Pop1955": 210, - "Pop1960": 240, - "Pop1965": 260, - "Pop1970": 300, - "Pop1975": 330, - "Pop1980": 370, - "Pop1985": 470, - "Pop1990": 660, - "Pop1995": 710, - "Pop2000": 760, - "Pop2005": 820, - "Pop2010": 850, - "Pop2015": 900, - "Pop2020": 990, - "Pop2025": 1080, - "Pop2050": 1164, - "Location": [ - 26.25, - 105.93 - ] - }, - { - "City": "Anyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 180, - "Pop1965": 220, - "Pop1970": 280, - "Pop1975": 360, - "Pop1980": 460, - "Pop1985": 540, - "Pop1990": 620, - "Pop1995": 690, - "Pop2000": 760, - "Pop2005": 850, - "Pop2010": 890, - "Pop2015": 950, - "Pop2020": 1060, - "Pop2025": 1160, - "Pop2050": 1240, - "Location": [ - 36.1, - 114.33 - ] - }, - { - "City": "Baoding", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 180, - "Pop1955": 210, - "Pop1960": 250, - "Pop1965": 290, - "Pop1970": 340, - "Pop1975": 400, - "Pop1980": 470, - "Pop1985": 540, - "Pop1990": 600, - "Pop1995": 730, - "Pop2000": 890, - "Pop2005": 1040, - "Pop2010": 1110, - "Pop2015": 1210, - "Pop2020": 1360, - "Pop2025": 1480, - "Pop2050": 1586, - "Location": [ - 38.85, - 115.48 - ] - }, - { - "City": "Baotou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 530, - "Pop1955": 590, - "Pop1960": 660, - "Pop1965": 740, - "Pop1970": 820, - "Pop1975": 920, - "Pop1980": 1020, - "Pop1985": 1130, - "Pop1990": 1230, - "Pop1995": 1430, - "Pop2000": 1660, - "Pop2005": 1920, - "Pop2010": 2040, - "Pop2015": 2210, - "Pop2020": 2470, - "Pop2025": 2690, - "Pop2050": 2869, - "Location": [ - 40.65, - 109.8 - ] - }, - { - "City": "Beijing", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 4330, - "Pop1955": 4630, - "Pop1960": 4940, - "Pop1965": 5280, - "Pop1970": 5650, - "Pop1975": 6030, - "Pop1980": 6450, - "Pop1985": 6890, - "Pop1990": 7360, - "Pop1995": 8490, - "Pop2000": 9780, - "Pop2005": 10720, - "Pop2010": 11110, - "Pop2015": 11740, - "Pop2020": 12840, - "Pop2025": 13810, - "Pop2050": 14545, - "Location": [ - 39.9, - 116.38 - ] - }, - { - "City": "Bengbu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 230, - "Pop1955": 270, - "Pop1960": 310, - "Pop1965": 350, - "Pop1970": 400, - "Pop1975": 460, - "Pop1980": 530, - "Pop1985": 610, - "Pop1990": 700, - "Pop1995": 750, - "Pop2000": 800, - "Pop2005": 870, - "Pop2010": 890, - "Pop2015": 940, - "Pop2020": 1040, - "Pop2025": 1140, - "Pop2050": 1225, - "Location": [ - 32.93, - 117.35 - ] - }, - { - "City": "Benxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 410, - "Pop1955": 470, - "Pop1960": 540, - "Pop1965": 610, - "Pop1970": 660, - "Pop1975": 710, - "Pop1980": 770, - "Pop1985": 840, - "Pop1990": 940, - "Pop1995": 960, - "Pop2000": 980, - "Pop2005": 1000, - "Pop2010": 1010, - "Pop2015": 1050, - "Pop2020": 1140, - "Pop2025": 1250, - "Pop2050": 1339, - "Location": [ - 41.3, - 123.77 - ] - }, - { - "City": "Changchun", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 760, - "Pop1955": 920, - "Pop1960": 1110, - "Pop1965": 1310, - "Pop1970": 1430, - "Pop1975": 1560, - "Pop1980": 1700, - "Pop1985": 1910, - "Pop1990": 2190, - "Pop1995": 2450, - "Pop2000": 2730, - "Pop2005": 3050, - "Pop2010": 3180, - "Pop2015": 3400, - "Pop2020": 3760, - "Pop2025": 4080, - "Pop2050": 4338, - "Location": [ - 43.88, - 125.31 - ] - }, - { - "City": "Changde", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 290, - "Pop1955": 350, - "Pop1960": 420, - "Pop1965": 490, - "Pop1970": 590, - "Pop1975": 700, - "Pop1980": 830, - "Pop1985": 990, - "Pop1990": 1180, - "Pop1995": 1260, - "Pop2000": 1340, - "Pop2005": 1430, - "Pop2010": 1470, - "Pop2015": 1540, - "Pop2020": 1700, - "Pop2025": 1850, - "Pop2050": 1979, - "Location": [ - 29.03, - 111.68 - ] - }, - { - "City": "Changsha, Hunan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 620, - "Pop1955": 670, - "Pop1960": 720, - "Pop1965": 780, - "Pop1970": 860, - "Pop1975": 940, - "Pop1980": 1040, - "Pop1985": 1160, - "Pop1990": 1330, - "Pop1995": 1670, - "Pop2000": 2090, - "Pop2005": 2450, - "Pop2010": 2600, - "Pop2015": 2830, - "Pop2020": 3170, - "Pop2025": 3440, - "Pop2050": 3663, - "Location": [ - 28.09, - 113 - ] - }, - { - "City": "Changzhou, Jiangsu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 180, - "Pop1965": 220, - "Pop1970": 280, - "Pop1975": 360, - "Pop1980": 460, - "Pop1985": 580, - "Pop1990": 730, - "Pop1995": 880, - "Pop2000": 1070, - "Pop2005": 1250, - "Pop2010": 1330, - "Pop2015": 1440, - "Pop2020": 1620, - "Pop2025": 1770, - "Pop2050": 1894, - "Location": [ - 31.78, - 119.97 - ] - }, - { - "City": "Chengdu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 770, - "Pop1955": 920, - "Pop1960": 1110, - "Pop1965": 1330, - "Pop1970": 1590, - "Pop1975": 1910, - "Pop1980": 2290, - "Pop1985": 2640, - "Pop1990": 2960, - "Pop1995": 3400, - "Pop2000": 3920, - "Pop2005": 4060, - "Pop2010": 4120, - "Pop2015": 4270, - "Pop2020": 4630, - "Pop2025": 5010, - "Pop2050": 5320, - "Location": [ - 30.67, - 104.07 - ] - }, - { - "City": "Chifeng", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 130, - "Pop1955": 160, - "Pop1960": 190, - "Pop1965": 240, - "Pop1970": 280, - "Pop1975": 340, - "Pop1980": 410, - "Pop1985": 600, - "Pop1990": 990, - "Pop1995": 1060, - "Pop2000": 1150, - "Pop2005": 1240, - "Pop2010": 1280, - "Pop2015": 1350, - "Pop2020": 1490, - "Pop2025": 1620, - "Pop2050": 1739, - "Location": [ - 42.27, - 118.95 - ] - }, - { - "City": "Chongqing", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 1680, - "Pop1955": 1840, - "Pop1960": 2010, - "Pop1965": 2180, - "Pop1970": 2310, - "Pop1975": 2440, - "Pop1980": 2580, - "Pop1985": 2810, - "Pop1990": 3120, - "Pop1995": 4340, - "Pop2000": 6040, - "Pop2005": 6360, - "Pop2010": 6460, - "Pop2015": 6690, - "Pop2020": 7250, - "Pop2025": 7820, - "Pop2050": 8275, - "Location": [ - 29.54, - 106.52 - ] - }, - { - "City": "Dalian", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 680, - "Pop1955": 850, - "Pop1960": 1060, - "Pop1965": 1280, - "Pop1970": 1340, - "Pop1975": 1400, - "Pop1980": 1460, - "Pop1985": 1790, - "Pop1990": 2470, - "Pop1995": 2660, - "Pop2000": 2860, - "Pop2005": 3070, - "Pop2010": 3170, - "Pop2015": 3340, - "Pop2020": 3660, - "Pop2025": 3970, - "Pop2050": 4221, - "Location": [ - 39.03, - 121.59 - ] - }, - { - "City": "Dandong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 240, - "Pop1955": 270, - "Pop1960": 300, - "Pop1965": 350, - "Pop1970": 400, - "Pop1975": 450, - "Pop1980": 510, - "Pop1985": 580, - "Pop1990": 660, - "Pop1995": 720, - "Pop2000": 780, - "Pop2005": 840, - "Pop2010": 870, - "Pop2015": 920, - "Pop2020": 1020, - "Pop2025": 1120, - "Pop2050": 1198, - "Location": [ - 40.11, - 124.38 - ] - }, - { - "City": "Daqing", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 260, - "Pop1955": 310, - "Pop1960": 370, - "Pop1965": 430, - "Pop1970": 510, - "Pop1975": 600, - "Pop1980": 720, - "Pop1985": 840, - "Pop1990": 1000, - "Pop1995": 1170, - "Pop2000": 1370, - "Pop2005": 1590, - "Pop2010": 1690, - "Pop2015": 1840, - "Pop2020": 2070, - "Pop2025": 2250, - "Pop2050": 2404, - "Location": [ - 46.58, - 125 - ] - }, - { - "City": "Datong, Shanxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 620, - "Pop1955": 660, - "Pop1960": 710, - "Pop1965": 760, - "Pop1970": 820, - "Pop1975": 880, - "Pop1980": 940, - "Pop1985": 1070, - "Pop1990": 1280, - "Pop1995": 1390, - "Pop2000": 1520, - "Pop2005": 1760, - "Pop2010": 1870, - "Pop2015": 2040, - "Pop2020": 2280, - "Pop2025": 2490, - "Pop2050": 2653, - "Location": [ - 40.06, - 113.28 - ] - }, - { - "City": "Dongguan, Guangdong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 380, - "Pop1955": 450, - "Pop1960": 540, - "Pop1965": 640, - "Pop1970": 760, - "Pop1975": 900, - "Pop1980": 1080, - "Pop1985": 1340, - "Pop1990": 1740, - "Pop1995": 2560, - "Pop2000": 3770, - "Pop2005": 4320, - "Pop2010": 4530, - "Pop2015": 4850, - "Pop2020": 5370, - "Pop2025": 5810, - "Pop2050": 6157, - "Location": [ - 23.03, - 113.71 - ] - }, - { - "City": "Foshan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 90, - "Pop1955": 110, - "Pop1960": 130, - "Pop1965": 160, - "Pop1970": 190, - "Pop1975": 220, - "Pop1980": 270, - "Pop1985": 330, - "Pop1990": 430, - "Pop1995": 570, - "Pop2000": 750, - "Pop2005": 890, - "Pop2010": 940, - "Pop2015": 1030, - "Pop2020": 1160, - "Pop2025": 1260, - "Pop2050": 1356, - "Location": [ - 23.03, - 113.71 - ] - }, - { - "City": "Fushun, Liaoning", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 630, - "Pop1955": 730, - "Pop1960": 830, - "Pop1965": 940, - "Pop1970": 1010, - "Pop1975": 1080, - "Pop1980": 1160, - "Pop1985": 1260, - "Pop1990": 1390, - "Pop1995": 1410, - "Pop2000": 1430, - "Pop2005": 1460, - "Pop2010": 1470, - "Pop2015": 1520, - "Pop2020": 1650, - "Pop2025": 1800, - "Pop2050": 1924, - "Location": [ - 41.85, - 123.9 - ] - }, - { - "City": "Fuxin", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 170, - "Pop1955": 200, - "Pop1960": 250, - "Pop1965": 310, - "Pop1970": 390, - "Pop1975": 480, - "Pop1980": 590, - "Pop1985": 680, - "Pop1990": 740, - "Pop1995": 680, - "Pop2000": 630, - "Pop2005": 720, - "Pop2010": 770, - "Pop2015": 840, - "Pop2020": 940, - "Pop2025": 1040, - "Pop2050": 1112, - "Location": [ - 42.01, - 121.65 - ] - }, - { - "City": "Fuyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 50, - "Pop1955": 60, - "Pop1960": 70, - "Pop1965": 90, - "Pop1970": 110, - "Pop1975": 130, - "Pop1980": 160, - "Pop1985": 190, - "Pop1990": 230, - "Pop1995": 380, - "Pop2000": 610, - "Pop2005": 730, - "Pop2010": 770, - "Pop2015": 840, - "Pop2020": 950, - "Pop2025": 1040, - "Pop2050": 1114, - "Location": [ - 30.05, - 119.94 - ] - }, - { - "City": "Fuzhou, Fujian", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 490, - "Pop1955": 600, - "Pop1960": 730, - "Pop1965": 870, - "Pop1970": 940, - "Pop1975": 1010, - "Pop1980": 1100, - "Pop1985": 1220, - "Pop1990": 1400, - "Pop1995": 1710, - "Pop2000": 2100, - "Pop2005": 2450, - "Pop2010": 2610, - "Pop2015": 2830, - "Pop2020": 3170, - "Pop2025": 3440, - "Pop2050": 3666, - "Location": [ - 26.07, - 119.3 - ] - }, - { - "City": "Guangzhou, Guangdong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 1490, - "Pop1955": 1680, - "Pop1960": 1880, - "Pop1965": 2120, - "Pop1970": 2380, - "Pop1975": 2670, - "Pop1980": 3000, - "Pop1985": 3420, - "Pop1990": 3920, - "Pop1995": 5380, - "Pop2000": 7390, - "Pop2005": 8420, - "Pop2010": 8830, - "Pop2015": 9450, - "Pop2020": 10410, - "Pop2025": 11220, - "Pop2050": 11835, - "Location": [ - 23.09, - 113.29 - ] - }, - { - "City": "Guilin", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 150, - "Pop1955": 180, - "Pop1960": 210, - "Pop1965": 250, - "Pop1970": 290, - "Pop1975": 340, - "Pop1980": 400, - "Pop1985": 470, - "Pop1990": 560, - "Pop1995": 670, - "Pop2000": 800, - "Pop2005": 930, - "Pop2010": 990, - "Pop2015": 1080, - "Pop2020": 1210, - "Pop2025": 1320, - "Pop2050": 1418, - "Location": [ - 25.27, - 110.29 - ] - }, - { - "City": "Guiyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 680, - "Pop1955": 750, - "Pop1960": 830, - "Pop1965": 920, - "Pop1970": 1030, - "Pop1975": 1140, - "Pop1980": 1260, - "Pop1985": 1440, - "Pop1990": 1660, - "Pop1995": 2210, - "Pop2000": 2930, - "Pop2005": 3450, - "Pop2010": 3660, - "Pop2015": 3980, - "Pop2020": 4440, - "Pop2025": 4820, - "Pop2050": 5114, - "Location": [ - 26.57, - 106.7 - ] - }, - { - "City": "Haerbin", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 1010, - "Pop1955": 1280, - "Pop1960": 1610, - "Pop1965": 1970, - "Pop1970": 2120, - "Pop1975": 2290, - "Pop1980": 2470, - "Pop1985": 2700, - "Pop1990": 2990, - "Pop1995": 3210, - "Pop2000": 3440, - "Pop2005": 3570, - "Pop2010": 3620, - "Pop2015": 3750, - "Pop2020": 4080, - "Pop2025": 4420, - "Pop2050": 4696, - "Location": [ - 45.75, - 126.62 - ] - }, - { - "City": "Handan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 380, - "Pop1955": 440, - "Pop1960": 500, - "Pop1965": 580, - "Pop1970": 670, - "Pop1975": 770, - "Pop1980": 890, - "Pop1985": 990, - "Pop1990": 1090, - "Pop1995": 1200, - "Pop2000": 1320, - "Pop2005": 1540, - "Pop2010": 1630, - "Pop2015": 1780, - "Pop2020": 1990, - "Pop2025": 2170, - "Pop2050": 2318, - "Location": [ - 36.6, - 114.48 - ] - }, - { - "City": "Hangzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 640, - "Pop1955": 740, - "Pop1960": 860, - "Pop1965": 980, - "Pop1970": 1030, - "Pop1975": 1100, - "Pop1980": 1160, - "Pop1985": 1290, - "Pop1990": 1480, - "Pop1995": 1890, - "Pop2000": 2410, - "Pop2005": 2830, - "Pop2010": 3010, - "Pop2015": 3270, - "Pop2020": 3650, - "Pop2025": 3970, - "Pop2050": 4217, - "Location": [ - 30.25, - 120.16 - ] - }, - { - "City": "Hefei", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 260, - "Pop1955": 310, - "Pop1960": 370, - "Pop1965": 440, - "Pop1970": 530, - "Pop1975": 640, - "Pop1980": 760, - "Pop1985": 920, - "Pop1990": 1100, - "Pop1995": 1340, - "Pop2000": 1640, - "Pop2005": 1920, - "Pop2010": 2040, - "Pop2015": 2210, - "Pop2020": 2480, - "Pop2025": 2700, - "Pop2050": 2878, - "Location": [ - 31.86, - 117.27 - ] - }, - { - "City": "Hengyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 170, - "Pop1955": 200, - "Pop1960": 240, - "Pop1965": 290, - "Pop1970": 340, - "Pop1975": 410, - "Pop1980": 490, - "Pop1985": 590, - "Pop1990": 700, - "Pop1995": 780, - "Pop2000": 870, - "Pop2005": 970, - "Pop2010": 1020, - "Pop2015": 1090, - "Pop2020": 1210, - "Pop2025": 1320, - "Pop2050": 1418, - "Location": [ - 26.9, - 112.6 - ] - }, - { - "City": "Heze", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 380, - "Pop1955": 440, - "Pop1960": 510, - "Pop1965": 590, - "Pop1970": 680, - "Pop1975": 780, - "Pop1980": 900, - "Pop1985": 1040, - "Pop1990": 1200, - "Pop1995": 1240, - "Pop2000": 1280, - "Pop2005": 1320, - "Pop2010": 1340, - "Pop2015": 1390, - "Pop2020": 1520, - "Pop2025": 1660, - "Pop2050": 1771, - "Location": [ - 35.23, - 115.43 - ] - }, - { - "City": "Hohhot", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 320, - "Pop1955": 360, - "Pop1960": 420, - "Pop1965": 470, - "Pop1970": 540, - "Pop1975": 620, - "Pop1980": 700, - "Pop1985": 810, - "Pop1990": 940, - "Pop1995": 1140, - "Pop2000": 1390, - "Pop2005": 1620, - "Pop2010": 1730, - "Pop2015": 1880, - "Pop2020": 2110, - "Pop2025": 2300, - "Pop2050": 2449, - "Location": [ - 40.81, - 111.64 - ] - }, - { - "City": "Huai'an", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 830, - "Pop1955": 860, - "Pop1960": 890, - "Pop1965": 930, - "Pop1970": 960, - "Pop1975": 1000, - "Pop1980": 1030, - "Pop1985": 1070, - "Pop1990": 1110, - "Pop1995": 1150, - "Pop2000": 1200, - "Pop2005": 1240, - "Pop2010": 1260, - "Pop2015": 1320, - "Pop2020": 1440, - "Pop2025": 1570, - "Pop2050": 1681, - "Location": [ - 33.5, - 119.13 - ] - }, - { - "City": "Huaibei", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 210, - "Pop1955": 230, - "Pop1960": 260, - "Pop1965": 300, - "Pop1970": 330, - "Pop1975": 380, - "Pop1980": 420, - "Pop1985": 480, - "Pop1990": 540, - "Pop1995": 630, - "Pop2000": 730, - "Pop2005": 860, - "Pop2010": 910, - "Pop2015": 1000, - "Pop2020": 1120, - "Pop2025": 1230, - "Pop2050": 1315, - "Location": [ - 34.15, - 116.65 - ] - }, - { - "City": "Huainan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 500, - "Pop1955": 560, - "Pop1960": 620, - "Pop1965": 700, - "Pop1970": 780, - "Pop1975": 880, - "Pop1980": 980, - "Pop1985": 1100, - "Pop1990": 1230, - "Pop1995": 1290, - "Pop2000": 1350, - "Pop2005": 1420, - "Pop2010": 1450, - "Pop2015": 1520, - "Pop2020": 1660, - "Pop2025": 1810, - "Pop2050": 1937, - "Location": [ - 32.61, - 116.98 - ] - }, - { - "City": "Huzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 680, - "Pop1955": 710, - "Pop1960": 750, - "Pop1965": 790, - "Pop1970": 840, - "Pop1975": 880, - "Pop1980": 930, - "Pop1985": 980, - "Pop1990": 1030, - "Pop1995": 1080, - "Pop2000": 1140, - "Pop2005": 1200, - "Pop2010": 1230, - "Pop2015": 1290, - "Pop2020": 1420, - "Pop2025": 1540, - "Pop2050": 1654, - "Location": [ - 30.86, - 120.1 - ] - }, - { - "City": "Jiamusi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 220, - "Pop1955": 250, - "Pop1960": 290, - "Pop1965": 330, - "Pop1970": 380, - "Pop1975": 440, - "Pop1980": 500, - "Pop1985": 580, - "Pop1990": 660, - "Pop1995": 750, - "Pop2000": 850, - "Pop2005": 970, - "Pop2010": 1020, - "Pop2015": 1100, - "Pop2020": 1230, - "Pop2025": 1340, - "Pop2050": 1441, - "Location": [ - 46.83, - 130.35 - ] - }, - { - "City": "Jiaozuo", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 210, - "Pop1955": 240, - "Pop1960": 270, - "Pop1965": 310, - "Pop1970": 350, - "Pop1975": 400, - "Pop1980": 460, - "Pop1985": 530, - "Pop1990": 600, - "Pop1995": 670, - "Pop2000": 740, - "Pop2005": 820, - "Pop2010": 860, - "Pop2015": 920, - "Pop2020": 1020, - "Pop2025": 1120, - "Pop2050": 1196, - "Location": [ - 35.24, - 113.22 - ] - }, - { - "City": "Jiaxing", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 450, - "Pop1955": 480, - "Pop1960": 510, - "Pop1965": 540, - "Pop1970": 580, - "Pop1975": 610, - "Pop1980": 650, - "Pop1985": 700, - "Pop1990": 740, - "Pop1995": 810, - "Pop2000": 880, - "Pop2005": 950, - "Pop2010": 990, - "Pop2015": 1050, - "Pop2020": 1160, - "Pop2025": 1270, - "Pop2050": 1359, - "Location": [ - 30.76, - 120.75 - ] - }, - { - "City": "Jilin", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 400, - "Pop1955": 460, - "Pop1960": 540, - "Pop1965": 630, - "Pop1970": 740, - "Pop1975": 870, - "Pop1980": 1010, - "Pop1985": 1160, - "Pop1990": 1320, - "Pop1995": 1600, - "Pop2000": 1930, - "Pop2005": 2260, - "Pop2010": 2400, - "Pop2015": 2610, - "Pop2020": 2920, - "Pop2025": 3170, - "Pop2050": 3376, - "Location": [ - 43.85, - 126.56 - ] - }, - { - "City": "Jinan, Shandong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 600, - "Pop1955": 740, - "Pop1960": 920, - "Pop1965": 1100, - "Pop1970": 1170, - "Pop1975": 1240, - "Pop1980": 1310, - "Pop1985": 1670, - "Pop1990": 2400, - "Pop1995": 2510, - "Pop2000": 2620, - "Pop2005": 2740, - "Pop2010": 2800, - "Pop2015": 2910, - "Pop2020": 3180, - "Pop2025": 3450, - "Pop2050": 3674, - "Location": [ - 36.65, - 116.96 - ] - }, - { - "City": "Jining, Shandong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 260, - "Pop1955": 290, - "Pop1960": 320, - "Pop1965": 360, - "Pop1970": 400, - "Pop1975": 450, - "Pop1980": 500, - "Pop1985": 630, - "Pop1990": 870, - "Pop1995": 950, - "Pop2000": 1040, - "Pop2005": 1140, - "Pop2010": 1190, - "Pop2015": 1260, - "Pop2020": 1400, - "Pop2025": 1520, - "Pop2050": 1632, - "Location": [ - 35.4, - 116.56 - ] - }, - { - "City": "Jinxi, Liaoning", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 230, - "Pop1955": 270, - "Pop1960": 330, - "Pop1965": 400, - "Pop1970": 480, - "Pop1975": 580, - "Pop1980": 700, - "Pop1985": 940, - "Pop1990": 1350, - "Pop1995": 1600, - "Pop2000": 1910, - "Pop2005": 2270, - "Pop2010": 2430, - "Pop2015": 2660, - "Pop2020": 2990, - "Pop2025": 3250, - "Pop2050": 3457, - "Location": [ - 41.11, - 122.05 - ] - }, - { - "City": "Jinzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 330, - "Pop1955": 370, - "Pop1960": 420, - "Pop1965": 470, - "Pop1970": 500, - "Pop1975": 530, - "Pop1980": 560, - "Pop1985": 630, - "Pop1990": 740, - "Pop1995": 800, - "Pop2000": 860, - "Pop2005": 920, - "Pop2010": 960, - "Pop2015": 1010, - "Pop2020": 1120, - "Pop2025": 1220, - "Pop2050": 1309, - "Location": [ - 41.1, - 121.13 - ] - }, - { - "City": "Jixi, Heilongjiang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 180, - "Pop1955": 220, - "Pop1960": 280, - "Pop1965": 350, - "Pop1970": 440, - "Pop1975": 560, - "Pop1980": 700, - "Pop1985": 790, - "Pop1990": 840, - "Pop1995": 870, - "Pop2000": 910, - "Pop2005": 950, - "Pop2010": 960, - "Pop2015": 1010, - "Pop2020": 1100, - "Pop2025": 1210, - "Pop2050": 1295, - "Location": [ - 45.3, - 130.96 - ] - }, - { - "City": "Kaifeng", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 350, - "Pop1955": 380, - "Pop1960": 410, - "Pop1965": 450, - "Pop1970": 490, - "Pop1975": 540, - "Pop1980": 580, - "Pop1985": 640, - "Pop1990": 690, - "Pop1995": 740, - "Pop2000": 790, - "Pop2005": 850, - "Pop2010": 870, - "Pop2015": 920, - "Pop2020": 1010, - "Pop2025": 1110, - "Pop2050": 1191, - "Location": [ - 34.79, - 114.34 - ] - }, - { - "City": "Kaohsiung", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 260, - "Pop1955": 340, - "Pop1960": 440, - "Pop1965": 590, - "Pop1970": 810, - "Pop1975": 990, - "Pop1980": 1160, - "Pop1985": 1290, - "Pop1990": 1380, - "Pop1995": 1420, - "Pop2000": 1470, - "Pop2005": 1520, - "Pop2010": 1540, - "Pop2015": 1600, - "Pop2020": 1740, - "Pop2025": 1900, - "Pop2050": 2029, - "Location": [ - 22.6, - 120.28 - ] - }, - { - "City": "Kunming", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 640, - "Pop1955": 740, - "Pop1960": 860, - "Pop1965": 980, - "Pop1970": 1100, - "Pop1975": 1220, - "Pop1980": 1360, - "Pop1985": 1490, - "Pop1990": 1610, - "Pop1995": 2040, - "Pop2000": 2590, - "Pop2005": 2840, - "Pop2010": 2930, - "Pop2015": 3100, - "Pop2020": 3400, - "Pop2025": 3690, - "Pop2050": 3928, - "Location": [ - 25.05, - 102.7 - ] - }, - { - "City": "Langfang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 60, - "Pop1955": 70, - "Pop1960": 80, - "Pop1965": 100, - "Pop1970": 110, - "Pop1975": 140, - "Pop1980": 160, - "Pop1985": 270, - "Pop1990": 590, - "Pop1995": 650, - "Pop2000": 710, - "Pop2005": 780, - "Pop2010": 810, - "Pop2015": 860, - "Pop2020": 960, - "Pop2025": 1050, - "Pop2050": 1124, - "Location": [ - 39.51, - 116.7 - ] - }, - { - "City": "Lanzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 350, - "Pop1955": 430, - "Pop1960": 540, - "Pop1965": 670, - "Pop1970": 840, - "Pop1975": 1040, - "Pop1980": 1300, - "Pop1985": 1490, - "Pop1990": 1620, - "Pop1995": 1830, - "Pop2000": 2070, - "Pop2005": 2410, - "Pop2010": 2560, - "Pop2015": 2780, - "Pop2020": 3120, - "Pop2025": 3390, - "Pop2050": 3604, - "Location": [ - 36.11, - 103.59 - ] - }, - { - "City": "Leshan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 600, - "Pop1955": 650, - "Pop1960": 700, - "Pop1965": 750, - "Pop1970": 800, - "Pop1975": 860, - "Pop1980": 930, - "Pop1985": 1000, - "Pop1990": 1070, - "Pop1995": 1090, - "Pop2000": 1120, - "Pop2005": 1140, - "Pop2010": 1160, - "Pop2015": 1200, - "Pop2020": 1310, - "Pop2025": 1430, - "Pop2050": 1528, - "Location": [ - 29.58, - 103.75 - ] - }, - { - "City": "Lianyungang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 120, - "Pop1955": 140, - "Pop1960": 170, - "Pop1965": 210, - "Pop1970": 250, - "Pop1975": 300, - "Pop1980": 370, - "Pop1985": 440, - "Pop1990": 540, - "Pop1995": 600, - "Pop2000": 680, - "Pop2005": 770, - "Pop2010": 810, - "Pop2015": 860, - "Pop2020": 970, - "Pop2025": 1060, - "Pop2050": 1137, - "Location": [ - 41.26, - 119.16 - ] - }, - { - "City": "Liaoyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 170, - "Pop1965": 210, - "Pop1970": 260, - "Pop1975": 330, - "Pop1980": 410, - "Pop1985": 510, - "Pop1990": 640, - "Pop1995": 680, - "Pop2000": 720, - "Pop2005": 770, - "Pop2010": 790, - "Pop2015": 840, - "Pop2020": 920, - "Pop2025": 1010, - "Pop2050": 1083, - "Location": [ - 41.26, - 123.17 - ] - }, - { - "City": "Linfen", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 100, - "Pop1955": 120, - "Pop1960": 140, - "Pop1965": 170, - "Pop1970": 200, - "Pop1975": 240, - "Pop1980": 280, - "Pop1985": 390, - "Pop1990": 580, - "Pop1995": 650, - "Pop2000": 720, - "Pop2005": 800, - "Pop2010": 830, - "Pop2015": 890, - "Pop2020": 990, - "Pop2025": 1090, - "Pop2050": 1167, - "Location": [ - 36.08, - 111.51 - ] - }, - { - "City": "Linyi, Shandong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 410, - "Pop1955": 490, - "Pop1960": 590, - "Pop1965": 710, - "Pop1970": 840, - "Pop1975": 1010, - "Pop1980": 1210, - "Pop1985": 1450, - "Pop1990": 1740, - "Pop1995": 1830, - "Pop2000": 1930, - "Pop2005": 2040, - "Pop2010": 2080, - "Pop2015": 2180, - "Pop2020": 2380, - "Pop2025": 2590, - "Pop2050": 2765, - "Location": [ - 35.05, - 118.31 - ] - }, - { - "City": "Liuan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 860, - "Pop1955": 910, - "Pop1960": 970, - "Pop1965": 1030, - "Pop1970": 1090, - "Pop1975": 1160, - "Pop1980": 1230, - "Pop1985": 1300, - "Pop1990": 1380, - "Pop1995": 1460, - "Pop2000": 1550, - "Pop2005": 1650, - "Pop2010": 1690, - "Pop2015": 1770, - "Pop2020": 1950, - "Pop2025": 2120, - "Pop2050": 2263, - "Location": [ - 31.73, - 116.46 - ] - }, - { - "City": "Liupanshui", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 400, - "Pop1955": 440, - "Pop1960": 480, - "Pop1965": 530, - "Pop1970": 580, - "Pop1975": 630, - "Pop1980": 690, - "Pop1985": 760, - "Pop1990": 830, - "Pop1995": 900, - "Pop2000": 990, - "Pop2005": 1150, - "Pop2010": 1220, - "Pop2015": 1330, - "Pop2020": 1490, - "Pop2025": 1630, - "Pop2050": 1745, - "Location": [ - 26.59, - 104.83 - ] - }, - { - "City": "Liuzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 140, - "Pop1955": 170, - "Pop1960": 220, - "Pop1965": 270, - "Pop1970": 340, - "Pop1975": 430, - "Pop1980": 540, - "Pop1985": 640, - "Pop1990": 750, - "Pop1995": 950, - "Pop2000": 1200, - "Pop2005": 1410, - "Pop2010": 1500, - "Pop2015": 1630, - "Pop2020": 1830, - "Pop2025": 2000, - "Pop2050": 2131, - "Location": [ - 24.31, - 109.38 - ] - }, - { - "City": "Luoyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 390, - "Pop1955": 450, - "Pop1960": 520, - "Pop1965": 600, - "Pop1970": 690, - "Pop1975": 800, - "Pop1980": 920, - "Pop1985": 1060, - "Pop1990": 1200, - "Pop1995": 1330, - "Pop2000": 1480, - "Pop2005": 1640, - "Pop2010": 1720, - "Pop2015": 1830, - "Pop2020": 2030, - "Pop2025": 2210, - "Pop2050": 2361, - "Location": [ - 34.67, - 112.36 - ] - }, - { - "City": "Luzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 90, - "Pop1955": 110, - "Pop1960": 130, - "Pop1965": 160, - "Pop1970": 190, - "Pop1975": 230, - "Pop1980": 280, - "Pop1985": 340, - "Pop1990": 410, - "Pop1995": 710, - "Pop2000": 1210, - "Pop2005": 1450, - "Pop2010": 1540, - "Pop2015": 1670, - "Pop2020": 1880, - "Pop2025": 2050, - "Pop2050": 2187, - "Location": [ - 28.88, - 105.43 - ] - }, - { - "City": "Mianyang, Sichuan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 480, - "Pop1955": 520, - "Pop1960": 560, - "Pop1965": 600, - "Pop1970": 650, - "Pop1975": 700, - "Pop1980": 750, - "Pop1985": 810, - "Pop1990": 880, - "Pop1995": 1000, - "Pop2000": 1150, - "Pop2005": 1320, - "Pop2010": 1400, - "Pop2015": 1510, - "Pop2020": 1690, - "Pop2025": 1840, - "Pop2050": 1969, - "Location": [ - 31.46, - 104.75 - ] - }, - { - "City": "Mudanjiang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 210, - "Pop1955": 240, - "Pop1960": 290, - "Pop1965": 340, - "Pop1970": 400, - "Pop1975": 460, - "Pop1980": 540, - "Pop1985": 640, - "Pop1990": 750, - "Pop1995": 870, - "Pop2000": 1000, - "Pop2005": 1170, - "Pop2010": 1240, - "Pop2015": 1360, - "Pop2020": 1520, - "Pop2025": 1660, - "Pop2050": 1778, - "Location": [ - 44.58, - 129.59 - ] - }, - { - "City": "Nanchang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 340, - "Pop1955": 440, - "Pop1960": 560, - "Pop1965": 700, - "Pop1970": 790, - "Pop1975": 900, - "Pop1980": 1010, - "Pop1985": 1130, - "Pop1990": 1260, - "Pop1995": 1520, - "Pop2000": 1820, - "Pop2005": 2190, - "Pop2010": 2350, - "Pop2015": 2580, - "Pop2020": 2910, - "Pop2025": 3170, - "Pop2050": 3373, - "Location": [ - 28.67, - 115.88 - ] - }, - { - "City": "Nanchong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 110, - "Pop1955": 120, - "Pop1960": 140, - "Pop1965": 150, - "Pop1970": 170, - "Pop1975": 190, - "Pop1980": 210, - "Pop1985": 320, - "Pop1990": 620, - "Pop1995": 1030, - "Pop2000": 1710, - "Pop2005": 2050, - "Pop2010": 2170, - "Pop2015": 2360, - "Pop2020": 2650, - "Pop2025": 2880, - "Pop2050": 3070, - "Location": [ - 28.68, - 115.88 - ] - }, - { - "City": "Nanjing, Jiangsu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 970, - "Pop1955": 1180, - "Pop1960": 1430, - "Pop1965": 1690, - "Pop1970": 1810, - "Pop1975": 1940, - "Pop1980": 2080, - "Pop1985": 2300, - "Pop1990": 2610, - "Pop1995": 3010, - "Pop2000": 3480, - "Pop2005": 3620, - "Pop2010": 3680, - "Pop2015": 3810, - "Pop2020": 4150, - "Pop2025": 4490, - "Pop2050": 4771, - "Location": [ - 32.04, - 118.76 - ] - }, - { - "City": "Nanning", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 170, - "Pop1955": 220, - "Pop1960": 280, - "Pop1965": 360, - "Pop1970": 470, - "Pop1975": 600, - "Pop1980": 780, - "Pop1985": 960, - "Pop1990": 1160, - "Pop1995": 1420, - "Pop2000": 1740, - "Pop2005": 2040, - "Pop2010": 2170, - "Pop2015": 2360, - "Pop2020": 2640, - "Pop2025": 2870, - "Pop2050": 3061, - "Location": [ - 22.83, - 108.29 - ] - }, - { - "City": "Nantong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 180, - "Pop1955": 210, - "Pop1960": 230, - "Pop1965": 260, - "Pop1970": 300, - "Pop1975": 330, - "Pop1980": 370, - "Pop1985": 420, - "Pop1990": 470, - "Pop1995": 600, - "Pop2000": 760, - "Pop2005": 890, - "Pop2010": 950, - "Pop2015": 1030, - "Pop2020": 1160, - "Pop2025": 1270, - "Pop2050": 1360, - "Location": [ - 32, - 120.83 - ] - }, - { - "City": "Nanyang, Henan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 80, - "Pop1955": 90, - "Pop1960": 110, - "Pop1965": 140, - "Pop1970": 170, - "Pop1975": 200, - "Pop1980": 250, - "Pop1985": 310, - "Pop1990": 380, - "Pop1995": 750, - "Pop2000": 1510, - "Pop2005": 1830, - "Pop2010": 1940, - "Pop2015": 2120, - "Pop2020": 2370, - "Pop2025": 2580, - "Pop2050": 2752, - "Location": [ - 33, - 112.53 - ] - }, - { - "City": "Neijiang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 140, - "Pop1955": 150, - "Pop1960": 170, - "Pop1965": 190, - "Pop1970": 210, - "Pop1975": 240, - "Pop1980": 270, - "Pop1985": 500, - "Pop1990": 1290, - "Pop1995": 1340, - "Pop2000": 1390, - "Pop2005": 1440, - "Pop2010": 1470, - "Pop2015": 1520, - "Pop2020": 1670, - "Pop2025": 1820, - "Pop2050": 1944, - "Location": [ - 29.58, - 105.06 - ] - }, - { - "City": "Ningbo", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 470, - "Pop1955": 530, - "Pop1960": 590, - "Pop1965": 660, - "Pop1970": 730, - "Pop1975": 820, - "Pop1980": 920, - "Pop1985": 1020, - "Pop1990": 1140, - "Pop1995": 1330, - "Pop2000": 1550, - "Pop2005": 1810, - "Pop2010": 1920, - "Pop2015": 2090, - "Pop2020": 2340, - "Pop2025": 2550, - "Pop2050": 2723, - "Location": [ - 29.86, - 121.55 - ] - }, - { - "City": "Pingdingshan, Henan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 160, - "Pop1955": 190, - "Pop1960": 220, - "Pop1965": 260, - "Pop1970": 310, - "Pop1975": 370, - "Pop1980": 440, - "Pop1985": 630, - "Pop1990": 1000, - "Pop1995": 950, - "Pop2000": 900, - "Pop2005": 860, - "Pop2010": 850, - "Pop2015": 850, - "Pop2020": 920, - "Pop2025": 1010, - "Pop2050": 1080, - "Location": [ - 33.73, - 113.3 - ] - }, - { - "City": "Pingxiang, Jiangxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 170, - "Pop1955": 190, - "Pop1960": 230, - "Pop1965": 260, - "Pop1970": 310, - "Pop1975": 360, - "Pop1980": 420, - "Pop1985": 490, - "Pop1990": 570, - "Pop1995": 660, - "Pop2000": 780, - "Pop2005": 900, - "Pop2010": 960, - "Pop2015": 1050, - "Pop2020": 1180, - "Pop2025": 1290, - "Pop2050": 1381, - "Location": [ - 27.63, - 113.85 - ] - }, - { - "City": "Qingdao", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 890, - "Pop1955": 930, - "Pop1960": 970, - "Pop1965": 1020, - "Pop1970": 1060, - "Pop1975": 1110, - "Pop1980": 1150, - "Pop1985": 1460, - "Pop1990": 2100, - "Pop1995": 2380, - "Pop2000": 2700, - "Pop2005": 2820, - "Pop2010": 2870, - "Pop2015": 2980, - "Pop2020": 3250, - "Pop2025": 3520, - "Pop2050": 3746, - "Location": [ - 36.14, - 120.43 - ] - }, - { - "City": "Qinhuangdao", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 150, - "Pop1955": 170, - "Pop1960": 200, - "Pop1965": 240, - "Pop1970": 280, - "Pop1975": 320, - "Pop1980": 380, - "Pop1985": 440, - "Pop1990": 520, - "Pop1995": 650, - "Pop2000": 800, - "Pop2005": 940, - "Pop2010": 1000, - "Pop2015": 1090, - "Pop2020": 1230, - "Pop2025": 1340, - "Pop2050": 1440, - "Location": [ - 39.93, - 119.6 - ] - }, - { - "City": "Qiqihaer", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 720, - "Pop1955": 780, - "Pop1960": 850, - "Pop1965": 920, - "Pop1970": 1000, - "Pop1975": 1090, - "Pop1980": 1180, - "Pop1985": 1290, - "Pop1990": 1400, - "Pop1995": 1470, - "Pop2000": 1540, - "Pop2005": 1610, - "Pop2010": 1640, - "Pop2015": 1710, - "Pop2020": 1880, - "Pop2025": 2040, - "Pop2050": 2182, - "Location": [ - 47.34, - 123.96 - ] - }, - { - "City": "Quanzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 220, - "Pop1955": 240, - "Pop1960": 270, - "Pop1965": 290, - "Pop1970": 320, - "Pop1975": 360, - "Pop1980": 400, - "Pop1985": 440, - "Pop1990": 480, - "Pop1995": 740, - "Pop2000": 1160, - "Pop2005": 1380, - "Pop2010": 1460, - "Pop2015": 1590, - "Pop2020": 1790, - "Pop2025": 1950, - "Pop2050": 2083, - "Location": [ - 24.91, - 118.58 - ] - }, - { - "City": "Shanghai", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 6070, - "Pop1955": 6300, - "Pop1960": 6540, - "Pop1965": 6790, - "Pop1970": 7060, - "Pop1975": 7330, - "Pop1980": 7610, - "Pop1985": 7900, - "Pop1990": 8200, - "Pop1995": 10420, - "Pop2000": 13240, - "Pop2005": 14500, - "Pop2010": 14990, - "Pop2015": 15790, - "Pop2020": 17210, - "Pop2025": 18470, - "Pop2050": 19412, - "Location": [ - 31.24, - 121.47 - ] - }, - { - "City": "Shangqiu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 60, - "Pop1955": 70, - "Pop1960": 80, - "Pop1965": 100, - "Pop1970": 120, - "Pop1975": 140, - "Pop1980": 170, - "Pop1985": 200, - "Pop1990": 240, - "Pop1995": 570, - "Pop2000": 1350, - "Pop2005": 1650, - "Pop2010": 1750, - "Pop2015": 1910, - "Pop2020": 2140, - "Pop2025": 2330, - "Pop2050": 2487, - "Location": [ - 34.41, - 115.63 - ] - }, - { - "City": "Shantou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 320, - "Pop1955": 370, - "Pop1960": 420, - "Pop1965": 470, - "Pop1970": 530, - "Pop1975": 610, - "Pop1980": 690, - "Pop1985": 780, - "Pop1990": 880, - "Pop1995": 1050, - "Pop2000": 1260, - "Pop2005": 1500, - "Pop2010": 1600, - "Pop2015": 1760, - "Pop2020": 1980, - "Pop2025": 2160, - "Pop2050": 2304, - "Location": [ - 23.36, - 116.7 - ] - }, - { - "City": "Shaoxing", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 60, - "Pop1955": 80, - "Pop1960": 90, - "Pop1965": 110, - "Pop1970": 140, - "Pop1975": 170, - "Pop1980": 200, - "Pop1985": 240, - "Pop1990": 290, - "Pop1995": 430, - "Pop2000": 620, - "Pop2005": 730, - "Pop2010": 780, - "Pop2015": 850, - "Pop2020": 950, - "Pop2025": 1040, - "Pop2050": 1121, - "Location": [ - 30, - 120.58 - ] - }, - { - "City": "Shenyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 2090, - "Pop1955": 2450, - "Pop1960": 2870, - "Pop1965": 3300, - "Pop1970": 3490, - "Pop1975": 3700, - "Pop1980": 3910, - "Pop1985": 4240, - "Pop1990": 4660, - "Pop1995": 4630, - "Pop2000": 4600, - "Pop2005": 4720, - "Pop2010": 4790, - "Pop2015": 4950, - "Pop2020": 5370, - "Pop2025": 5810, - "Pop2050": 6156, - "Location": [ - 41.8, - 123.38 - ] - }, - { - "City": "Shenzhen", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 170, - "Pop1955": 190, - "Pop1960": 220, - "Pop1965": 240, - "Pop1970": 270, - "Pop1975": 300, - "Pop1980": 340, - "Pop1985": 500, - "Pop1990": 880, - "Pop1995": 2300, - "Pop2000": 6070, - "Pop2005": 7230, - "Pop2010": 7580, - "Pop2015": 8110, - "Pop2020": 8950, - "Pop2025": 9650, - "Pop2050": 10196, - "Location": [ - 22.55, - 114.1 - ] - }, - { - "City": "Shijiazhuang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 340, - "Pop1955": 400, - "Pop1960": 480, - "Pop1965": 580, - "Pop1970": 690, - "Pop1975": 830, - "Pop1980": 990, - "Pop1985": 1170, - "Pop1990": 1370, - "Pop1995": 1630, - "Pop2000": 1950, - "Pop2005": 2280, - "Pop2010": 2420, - "Pop2015": 2630, - "Pop2020": 2940, - "Pop2025": 3200, - "Pop2050": 3405, - "Location": [ - 38.07, - 114.55 - ] - }, - { - "City": "Suining, Sichuan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 760, - "Pop1955": 810, - "Pop1960": 860, - "Pop1965": 920, - "Pop1970": 980, - "Pop1975": 1040, - "Pop1980": 1110, - "Pop1985": 1180, - "Pop1990": 1260, - "Pop1995": 1300, - "Pop2000": 1350, - "Pop2005": 1400, - "Pop2010": 1420, - "Pop2015": 1480, - "Pop2020": 1620, - "Pop2025": 1770, - "Pop2050": 1888, - "Location": [ - 30.51, - 105.56 - ] - }, - { - "City": "Suzhou, Anhui", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 60, - "Pop1955": 70, - "Pop1960": 90, - "Pop1965": 100, - "Pop1970": 120, - "Pop1975": 150, - "Pop1980": 180, - "Pop1985": 220, - "Pop1990": 260, - "Pop1995": 620, - "Pop2000": 1510, - "Pop2005": 1850, - "Pop2010": 1960, - "Pop2015": 2140, - "Pop2020": 2390, - "Pop2025": 2610, - "Pop2050": 2780, - "Location": [ - 33.61, - 117 - ] - }, - { - "City": "Suzhou, Jiangsu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 460, - "Pop1955": 490, - "Pop1960": 520, - "Pop1965": 550, - "Pop1970": 580, - "Pop1975": 620, - "Pop1980": 660, - "Pop1985": 740, - "Pop1990": 880, - "Pop1995": 1080, - "Pop2000": 1330, - "Pop2005": 1550, - "Pop2010": 1650, - "Pop2015": 1800, - "Pop2020": 2010, - "Pop2025": 2200, - "Pop2050": 2343, - "Location": [ - 31.3, - 120.6 - ] - }, - { - "City": "Taian, Shandong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 830, - "Pop1955": 890, - "Pop1960": 950, - "Pop1965": 1010, - "Pop1970": 1080, - "Pop1975": 1160, - "Pop1980": 1240, - "Pop1985": 1320, - "Pop1990": 1410, - "Pop1995": 1470, - "Pop2000": 1530, - "Pop2005": 1600, - "Pop2010": 1630, - "Pop2015": 1700, - "Pop2020": 1860, - "Pop2025": 2020, - "Pop2050": 2160, - "Location": [ - 36.16, - 117.11 - ] - }, - { - "City": "Taichung", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 190, - "Pop1955": 240, - "Pop1960": 290, - "Pop1965": 360, - "Pop1970": 440, - "Pop1975": 540, - "Pop1980": 590, - "Pop1985": 660, - "Pop1990": 750, - "Pop1995": 840, - "Pop2000": 930, - "Pop2005": 1030, - "Pop2010": 1080, - "Pop2015": 1150, - "Pop2020": 1280, - "Pop2025": 1400, - "Pop2050": 1499, - "Location": [ - 24.14, - 120.67 - ] - }, - { - "City": "Tainan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 310, - "Pop1955": 350, - "Pop1960": 380, - "Pop1965": 420, - "Pop1970": 470, - "Pop1975": 520, - "Pop1980": 580, - "Pop1985": 630, - "Pop1990": 680, - "Pop1995": 700, - "Pop2000": 720, - "Pop2005": 750, - "Pop2010": 760, - "Pop2015": 790, - "Pop2020": 870, - "Pop2025": 950, - "Pop2050": 1021, - "Location": [ - 23.01, - 120.2 - ] - }, - { - "City": "Taipei", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 600, - "Pop1955": 760, - "Pop1960": 960, - "Pop1965": 1230, - "Pop1970": 1740, - "Pop1975": 2020, - "Pop1980": 2220, - "Pop1985": 2450, - "Pop1990": 2710, - "Pop1995": 2680, - "Pop2000": 2640, - "Pop2005": 2610, - "Pop2010": 2600, - "Pop2015": 2650, - "Pop2020": 2860, - "Pop2025": 3100, - "Pop2050": 3305, - "Location": [ - 25.03, - 121.5 - ] - }, - { - "City": "Taiyuan, Shanxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 630, - "Pop1955": 790, - "Pop1960": 990, - "Pop1965": 1220, - "Pop1970": 1360, - "Pop1975": 1520, - "Pop1980": 1700, - "Pop1985": 1930, - "Pop1990": 2220, - "Pop1995": 2270, - "Pop2000": 2520, - "Pop2005": 2790, - "Pop2010": 2910, - "Pop2015": 3100, - "Pop2020": 3430, - "Pop2025": 3720, - "Pop2050": 3962, - "Location": [ - 37.89, - 112.55 - ] - }, - { - "City": "Tangshan, Hebei", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 640, - "Pop1955": 730, - "Pop1960": 840, - "Pop1965": 950, - "Pop1970": 1050, - "Pop1975": 1160, - "Pop1980": 1280, - "Pop1985": 1390, - "Pop1990": 1480, - "Pop1995": 1590, - "Pop2000": 1700, - "Pop2005": 1820, - "Pop2010": 1880, - "Pop2015": 1980, - "Pop2020": 2180, - "Pop2025": 2370, - "Pop2050": 2526, - "Location": [ - 39.61, - 118.18 - ] - }, - { - "City": "Tianjin", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 2370, - "Pop1955": 2930, - "Pop1960": 3620, - "Pop1965": 4330, - "Pop1970": 4590, - "Pop1975": 4870, - "Pop1980": 5160, - "Pop1985": 5470, - "Pop1990": 5800, - "Pop1995": 6250, - "Pop2000": 6720, - "Pop2005": 7040, - "Pop2010": 7180, - "Pop2015": 7470, - "Pop2020": 8110, - "Pop2025": 8740, - "Pop2050": 9243, - "Location": [ - 39.12, - 117.18 - ] - }, - { - "City": "Tianmen", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 1070, - "Pop1955": 1120, - "Pop1960": 1160, - "Pop1965": 1210, - "Pop1970": 1260, - "Pop1975": 1310, - "Pop1980": 1370, - "Pop1985": 1420, - "Pop1990": 1480, - "Pop1995": 1540, - "Pop2000": 1610, - "Pop2005": 1680, - "Pop2010": 1710, - "Pop2015": 1780, - "Pop2020": 1940, - "Pop2025": 2120, - "Pop2050": 2261, - "Location": [ - 30.41, - 112.85 - ] - }, - { - "City": "Tianshui", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 160, - "Pop1955": 210, - "Pop1960": 260, - "Pop1965": 330, - "Pop1970": 420, - "Pop1975": 520, - "Pop1980": 660, - "Pop1985": 830, - "Pop1990": 1040, - "Pop1995": 1090, - "Pop2000": 1140, - "Pop2005": 1200, - "Pop2010": 1220, - "Pop2015": 1280, - "Pop2020": 1400, - "Pop2025": 1530, - "Pop2050": 1640, - "Location": [ - 34.58, - 105.73 - ] - }, - { - "City": "Tongliao", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 110, - "Pop1955": 130, - "Pop1960": 160, - "Pop1965": 190, - "Pop1970": 230, - "Pop1975": 280, - "Pop1980": 340, - "Pop1985": 460, - "Pop1990": 670, - "Pop1995": 730, - "Pop2000": 790, - "Pop2005": 860, - "Pop2010": 880, - "Pop2015": 940, - "Pop2020": 1040, - "Pop2025": 1130, - "Pop2050": 1215, - "Location": [ - 43.61, - 122.26 - ] - }, - { - "City": "Ürümqi (Wulumqi)", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 250, - "Pop1955": 310, - "Pop1960": 380, - "Pop1965": 470, - "Pop1970": 580, - "Pop1975": 720, - "Pop1980": 880, - "Pop1985": 1030, - "Pop1990": 1160, - "Pop1995": 1420, - "Pop2000": 1730, - "Pop2005": 2020, - "Pop2010": 2150, - "Pop2015": 2340, - "Pop2020": 2620, - "Pop2025": 2850, - "Pop2050": 3038, - "Location": [ - 43.78, - 87.58 - ] - }, - { - "City": "Weifang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 180, - "Pop1955": 220, - "Pop1960": 270, - "Pop1965": 320, - "Pop1970": 390, - "Pop1975": 470, - "Pop1980": 570, - "Pop1985": 780, - "Pop1990": 1150, - "Pop1995": 1260, - "Pop2000": 1370, - "Pop2005": 1500, - "Pop2010": 1550, - "Pop2015": 1650, - "Pop2020": 1820, - "Pop2025": 1980, - "Pop2050": 2120, - "Location": [ - 36.71, - 119.1 - ] - }, - { - "City": "Wenzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 260, - "Pop1955": 280, - "Pop1960": 320, - "Pop1965": 350, - "Pop1970": 390, - "Pop1975": 440, - "Pop1980": 490, - "Pop1985": 540, - "Pop1990": 600, - "Pop1995": 1060, - "Pop2000": 1840, - "Pop2005": 2210, - "Pop2010": 2350, - "Pop2015": 2560, - "Pop2020": 2860, - "Pop2025": 3110, - "Pop2050": 3313, - "Location": [ - 27.99, - 120.65 - ] - }, - { - "City": "Wuhan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 1310, - "Pop1955": 1510, - "Pop1960": 1740, - "Pop1965": 2010, - "Pop1970": 2310, - "Pop1975": 2670, - "Pop1980": 3070, - "Pop1985": 3460, - "Pop1990": 3830, - "Pop1995": 5050, - "Pop2000": 6660, - "Pop2005": 7090, - "Pop2010": 7240, - "Pop2015": 7540, - "Pop2020": 8200, - "Pop2025": 8840, - "Pop2050": 9339, - "Location": [ - 30.57, - 114.27 - ] - }, - { - "City": "Wuhu, Anhui", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 210, - "Pop1955": 240, - "Pop1960": 270, - "Pop1965": 300, - "Pop1970": 340, - "Pop1975": 390, - "Pop1980": 440, - "Pop1985": 490, - "Pop1990": 550, - "Pop1995": 620, - "Pop2000": 690, - "Pop2005": 770, - "Pop2010": 810, - "Pop2015": 870, - "Pop2020": 970, - "Pop2025": 1060, - "Pop2050": 1138, - "Location": [ - 31.33, - 118.35 - ] - }, - { - "City": "Wuxi, Jiangsu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 570, - "Pop1955": 590, - "Pop1960": 600, - "Pop1965": 630, - "Pop1970": 680, - "Pop1975": 730, - "Pop1980": 790, - "Pop1985": 880, - "Pop1990": 1010, - "Pop1995": 1190, - "Pop2000": 1410, - "Pop2005": 1650, - "Pop2010": 1750, - "Pop2015": 1900, - "Pop2020": 2130, - "Pop2025": 2330, - "Pop2050": 2481, - "Location": [ - 33, - 120 - ] - }, - { - "City": "Xiamen", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 210, - "Pop1955": 240, - "Pop1960": 280, - "Pop1965": 320, - "Pop1970": 360, - "Pop1975": 420, - "Pop1980": 480, - "Pop1985": 560, - "Pop1990": 640, - "Pop1995": 1120, - "Pop2000": 1980, - "Pop2005": 2370, - "Pop2010": 2520, - "Pop2015": 2740, - "Pop2020": 3060, - "Pop2025": 3330, - "Pop2050": 3545, - "Location": [ - 24.46, - 118.07 - ] - }, - { - "City": "Xi'an, Shaanxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 710, - "Pop1955": 840, - "Pop1960": 1010, - "Pop1965": 1200, - "Pop1970": 1440, - "Pop1975": 1720, - "Pop1980": 2050, - "Pop1985": 2430, - "Pop1990": 2870, - "Pop1995": 3270, - "Pop2000": 3720, - "Pop2005": 3930, - "Pop2010": 4010, - "Pop2015": 4180, - "Pop2020": 4560, - "Pop2025": 4930, - "Pop2050": 5233, - "Location": [ - 34.26, - 108.9 - ] - }, - { - "City": "Xiangfan, Hubei", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 100, - "Pop1955": 120, - "Pop1960": 150, - "Pop1965": 180, - "Pop1970": 210, - "Pop1975": 250, - "Pop1980": 300, - "Pop1985": 370, - "Pop1990": 490, - "Pop1995": 650, - "Pop2000": 860, - "Pop2005": 1010, - "Pop2010": 1070, - "Pop2015": 1160, - "Pop2020": 1310, - "Pop2025": 1430, - "Pop2050": 1533, - "Location": [ - 30.4, - 114.88 - ] - }, - { - "City": "Xiantao", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 1000, - "Pop1955": 1040, - "Pop1960": 1080, - "Pop1965": 1120, - "Pop1970": 1170, - "Pop1975": 1210, - "Pop1980": 1260, - "Pop1985": 1310, - "Pop1990": 1360, - "Pop1995": 1420, - "Pop2000": 1470, - "Pop2005": 1530, - "Pop2010": 1560, - "Pop2015": 1620, - "Pop2020": 1770, - "Pop2025": 1930, - "Pop2050": 2062, - "Location": [ - 30.38, - 113.4 - ] - }, - { - "City": "Xianyang, Shaanxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 100, - "Pop1955": 130, - "Pop1960": 170, - "Pop1965": 220, - "Pop1970": 280, - "Pop1975": 350, - "Pop1980": 450, - "Pop1985": 580, - "Pop1990": 740, - "Pop1995": 840, - "Pop2000": 950, - "Pop2005": 1070, - "Pop2010": 1130, - "Pop2015": 1210, - "Pop2020": 1350, - "Pop2025": 1480, - "Pop2050": 1584, - "Location": [ - 34.35, - 108.71 - ] - }, - { - "City": "Xingyi, Guizhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 280, - "Pop1955": 310, - "Pop1960": 340, - "Pop1965": 370, - "Pop1970": 410, - "Pop1975": 450, - "Pop1980": 490, - "Pop1985": 540, - "Pop1990": 590, - "Pop1995": 650, - "Pop2000": 720, - "Pop2005": 780, - "Pop2010": 820, - "Pop2015": 870, - "Pop2020": 960, - "Pop2025": 1060, - "Pop2050": 1133, - "Location": [ - 24.53, - 104.31 - ] - }, - { - "City": "Xining", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 260, - "Pop1955": 290, - "Pop1960": 330, - "Pop1965": 370, - "Pop1970": 420, - "Pop1975": 480, - "Pop1980": 540, - "Pop1985": 620, - "Pop1990": 700, - "Pop1995": 770, - "Pop2000": 850, - "Pop2005": 990, - "Pop2010": 1050, - "Pop2015": 1140, - "Pop2020": 1280, - "Pop2025": 1400, - "Pop2050": 1504, - "Location": [ - 36.64, - 101.76 - ] - }, - { - "City": "Xinxiang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 240, - "Pop1955": 270, - "Pop1960": 300, - "Pop1965": 340, - "Pop1970": 380, - "Pop1975": 430, - "Pop1980": 480, - "Pop1985": 550, - "Pop1990": 610, - "Pop1995": 690, - "Pop2000": 770, - "Pop2005": 860, - "Pop2010": 900, - "Pop2015": 970, - "Pop2020": 1080, - "Pop2025": 1180, - "Pop2050": 1268, - "Location": [ - 35.3, - 113.86 - ] - }, - { - "City": "Xinyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 90, - "Pop1955": 110, - "Pop1960": 120, - "Pop1965": 140, - "Pop1970": 160, - "Pop1975": 180, - "Pop1980": 210, - "Pop1985": 240, - "Pop1990": 270, - "Pop1995": 570, - "Pop2000": 1200, - "Pop2005": 1450, - "Pop2010": 1540, - "Pop2015": 1680, - "Pop2020": 1880, - "Pop2025": 2050, - "Pop2050": 2192, - "Location": [ - 32.13, - 114.05 - ] - }, - { - "City": "Xinyu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 230, - "Pop1955": 260, - "Pop1960": 300, - "Pop1965": 340, - "Pop1970": 380, - "Pop1975": 420, - "Pop1980": 480, - "Pop1985": 540, - "Pop1990": 610, - "Pop1995": 680, - "Pop2000": 770, - "Pop2005": 870, - "Pop2010": 910, - "Pop2015": 980, - "Pop2020": 1100, - "Pop2025": 1200, - "Pop2050": 1285, - "Location": [ - 27.79, - 114.92 - ] - }, - { - "City": "Xuanzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 590, - "Pop1955": 610, - "Pop1960": 630, - "Pop1965": 650, - "Pop1970": 670, - "Pop1975": 690, - "Pop1980": 720, - "Pop1985": 740, - "Pop1990": 770, - "Pop1995": 800, - "Pop2000": 820, - "Pop2005": 850, - "Pop2010": 870, - "Pop2015": 900, - "Pop2020": 990, - "Pop2025": 1080, - "Pop2050": 1158, - "Location": [ - 27.09, - 112.71 - ] - }, - { - "City": "Xuzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 340, - "Pop1955": 400, - "Pop1960": 460, - "Pop1965": 530, - "Pop1970": 600, - "Pop1975": 670, - "Pop1980": 740, - "Pop1985": 840, - "Pop1990": 940, - "Pop1995": 1250, - "Pop2000": 1650, - "Pop2005": 1960, - "Pop2010": 2090, - "Pop2015": 2280, - "Pop2020": 2560, - "Pop2025": 2790, - "Pop2050": 2975, - "Location": [ - 34.26, - 117.16 - ] - }, - { - "City": "Yancheng, Jiangsu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 140, - "Pop1955": 170, - "Pop1960": 200, - "Pop1965": 230, - "Pop1970": 270, - "Pop1975": 310, - "Pop1980": 360, - "Pop1985": 430, - "Pop1990": 500, - "Pop1995": 580, - "Pop2000": 680, - "Pop2005": 790, - "Pop2010": 840, - "Pop2015": 910, - "Pop2020": 1030, - "Pop2025": 1130, - "Pop2050": 1209, - "Location": [ - 33.38, - 120.11 - ] - }, - { - "City": "Yantai", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 190, - "Pop1955": 210, - "Pop1960": 240, - "Pop1965": 260, - "Pop1970": 300, - "Pop1975": 330, - "Pop1980": 370, - "Pop1985": 520, - "Pop1990": 840, - "Pop1995": 1190, - "Pop2000": 1680, - "Pop2005": 1990, - "Pop2010": 2120, - "Pop2015": 2300, - "Pop2020": 2580, - "Pop2025": 2800, - "Pop2050": 2989, - "Location": [ - 37.45, - 121.44 - ] - }, - { - "City": "Yibin", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 80, - "Pop1955": 100, - "Pop1960": 110, - "Pop1965": 140, - "Pop1970": 160, - "Pop1975": 190, - "Pop1980": 230, - "Pop1985": 360, - "Pop1990": 680, - "Pop1995": 740, - "Pop2000": 800, - "Pop2005": 870, - "Pop2010": 900, - "Pop2015": 950, - "Pop2020": 1060, - "Pop2025": 1160, - "Pop2050": 1240, - "Location": [ - 28.76, - 104.61 - ] - }, - { - "City": "Yichang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 110, - "Pop1955": 130, - "Pop1960": 160, - "Pop1965": 190, - "Pop1970": 230, - "Pop1975": 280, - "Pop1980": 340, - "Pop1985": 410, - "Pop1990": 490, - "Pop1995": 590, - "Pop2000": 700, - "Pop2005": 820, - "Pop2010": 880, - "Pop2015": 950, - "Pop2020": 1070, - "Pop2025": 1170, - "Pop2050": 1259, - "Location": [ - 30.7, - 111.28 - ] - }, - { - "City": "Yichun, Heilongjiang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 550, - "Pop1955": 590, - "Pop1960": 620, - "Pop1965": 660, - "Pop1970": 700, - "Pop1975": 740, - "Pop1980": 780, - "Pop1985": 830, - "Pop1990": 880, - "Pop1995": 850, - "Pop2000": 820, - "Pop2005": 780, - "Pop2010": 780, - "Pop2015": 780, - "Pop2020": 850, - "Pop2025": 930, - "Pop2050": 997, - "Location": [ - 47.73, - 128.9 - ] - }, - { - "City": "Yichun, Jiangxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 340, - "Pop1955": 380, - "Pop1960": 440, - "Pop1965": 500, - "Pop1970": 580, - "Pop1975": 660, - "Pop1980": 760, - "Pop1985": 820, - "Pop1990": 840, - "Pop1995": 880, - "Pop2000": 920, - "Pop2005": 960, - "Pop2010": 980, - "Pop2015": 1020, - "Pop2020": 1130, - "Pop2025": 1230, - "Pop2050": 1320, - "Location": [ - 27.8, - 114.38 - ] - }, - { - "City": "Yinchuan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 100, - "Pop1955": 120, - "Pop1960": 150, - "Pop1965": 180, - "Pop1970": 220, - "Pop1975": 270, - "Pop1980": 340, - "Pop1985": 410, - "Pop1990": 500, - "Pop1995": 630, - "Pop2000": 800, - "Pop2005": 930, - "Pop2010": 990, - "Pop2015": 1080, - "Pop2020": 1210, - "Pop2025": 1330, - "Pop2050": 1423, - "Location": [ - 38.46, - 106.26 - ] - }, - { - "City": "Yingkou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 120, - "Pop1955": 150, - "Pop1960": 180, - "Pop1965": 220, - "Pop1970": 260, - "Pop1975": 320, - "Pop1980": 390, - "Pop1985": 470, - "Pop1990": 570, - "Pop1995": 630, - "Pop2000": 690, - "Pop2005": 760, - "Pop2010": 800, - "Pop2015": 850, - "Pop2020": 940, - "Pop2025": 1030, - "Pop2050": 1107, - "Location": [ - 40.66, - 122.23 - ] - }, - { - "City": "Yiyang, Hunan", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 400, - "Pop1955": 450, - "Pop1960": 510, - "Pop1965": 570, - "Pop1970": 650, - "Pop1975": 730, - "Pop1980": 830, - "Pop1985": 940, - "Pop1990": 1060, - "Pop1995": 1140, - "Pop2000": 1220, - "Pop2005": 1310, - "Pop2010": 1350, - "Pop2015": 1420, - "Pop2020": 1570, - "Pop2025": 1710, - "Pop2050": 1833, - "Location": [ - 28.58, - 112.33 - ] - }, - { - "City": "Yongzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 840, - "Pop1955": 850, - "Pop1960": 860, - "Pop1965": 880, - "Pop1970": 890, - "Pop1975": 900, - "Pop1980": 920, - "Pop1985": 930, - "Pop1990": 950, - "Pop1995": 960, - "Pop2000": 980, - "Pop2005": 990, - "Pop2010": 1000, - "Pop2015": 1030, - "Pop2020": 1130, - "Pop2025": 1230, - "Pop2050": 1320, - "Location": [ - 26.21, - 111.61 - ] - }, - { - "City": "Yuci", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 90, - "Pop1955": 100, - "Pop1960": 120, - "Pop1965": 150, - "Pop1970": 180, - "Pop1975": 210, - "Pop1980": 250, - "Pop1985": 330, - "Pop1990": 470, - "Pop1995": 560, - "Pop2000": 660, - "Pop2005": 780, - "Pop2010": 840, - "Pop2015": 920, - "Pop2020": 1040, - "Pop2025": 1140, - "Pop2050": 1224, - "Location": [ - 37.68, - 112.73 - ] - }, - { - "City": "Yueyang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 670, - "Pop1955": 710, - "Pop1960": 760, - "Pop1965": 800, - "Pop1970": 850, - "Pop1975": 900, - "Pop1980": 960, - "Pop1985": 1020, - "Pop1990": 1080, - "Pop1995": 1000, - "Pop2000": 920, - "Pop2005": 850, - "Pop2010": 830, - "Pop2015": 820, - "Pop2020": 880, - "Pop2025": 960, - "Pop2050": 1032, - "Location": [ - 29.36, - 113.1 - ] - }, - { - "City": "Yulin, Guangxi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 190, - "Pop1955": 230, - "Pop1960": 260, - "Pop1965": 310, - "Pop1970": 360, - "Pop1975": 420, - "Pop1980": 490, - "Pop1985": 570, - "Pop1990": 670, - "Pop1995": 780, - "Pop2000": 910, - "Pop2005": 1060, - "Pop2010": 1130, - "Pop2015": 1230, - "Pop2020": 1380, - "Pop2025": 1510, - "Pop2050": 1613, - "Location": [ - 22.63, - 110.15 - ] - }, - { - "City": "Zaozhuang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 280, - "Pop1955": 360, - "Pop1960": 450, - "Pop1965": 560, - "Pop1970": 710, - "Pop1975": 900, - "Pop1980": 1130, - "Pop1985": 1420, - "Pop1990": 1790, - "Pop1995": 1890, - "Pop2000": 1990, - "Pop2005": 2100, - "Pop2010": 2140, - "Pop2015": 2240, - "Pop2020": 2460, - "Pop2025": 2670, - "Pop2050": 2846, - "Location": [ - 34.86, - 117.55 - ] - }, - { - "City": "Zhangjiakou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 300, - "Pop1955": 340, - "Pop1960": 380, - "Pop1965": 420, - "Pop1970": 470, - "Pop1975": 520, - "Pop1980": 580, - "Pop1985": 650, - "Pop1990": 720, - "Pop1995": 800, - "Pop2000": 900, - "Pop2005": 1000, - "Pop2010": 1050, - "Pop2015": 1120, - "Pop2020": 1250, - "Pop2025": 1360, - "Pop2050": 1461, - "Location": [ - 40.81, - 114.88 - ] - }, - { - "City": "Zhanjiang", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 410, - "Pop1955": 460, - "Pop1960": 510, - "Pop1965": 580, - "Pop1970": 650, - "Pop1975": 730, - "Pop1980": 830, - "Pop1985": 930, - "Pop1990": 1050, - "Pop1995": 1180, - "Pop2000": 1340, - "Pop2005": 1510, - "Pop2010": 1590, - "Pop2015": 1710, - "Pop2020": 1900, - "Pop2025": 2080, - "Pop2050": 2216, - "Location": [ - 21.2, - 110.4 - ] - }, - { - "City": "Zhaotong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 130, - "Pop1955": 160, - "Pop1960": 190, - "Pop1965": 220, - "Pop1970": 270, - "Pop1975": 320, - "Pop1980": 380, - "Pop1985": 470, - "Pop1990": 620, - "Pop1995": 670, - "Pop2000": 720, - "Pop2005": 780, - "Pop2010": 810, - "Pop2015": 860, - "Pop2020": 950, - "Pop2025": 1040, - "Pop2050": 1113, - "Location": [ - 27.31, - 103.71 - ] - }, - { - "City": "Zhengzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 520, - "Pop1955": 650, - "Pop1960": 810, - "Pop1965": 990, - "Pop1970": 1100, - "Pop1975": 1230, - "Pop1980": 1370, - "Pop1985": 1540, - "Pop1990": 1750, - "Pop1995": 2080, - "Pop2000": 2470, - "Pop2005": 2590, - "Pop2010": 2640, - "Pop2015": 2740, - "Pop2020": 2990, - "Pop2025": 3240, - "Pop2050": 3452, - "Location": [ - 34.75, - 113.64 - ] - }, - { - "City": "Zhenjiang, Jiangsu", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 90, - "Pop1955": 110, - "Pop1960": 130, - "Pop1965": 160, - "Pop1970": 200, - "Pop1975": 260, - "Pop1980": 320, - "Pop1985": 390, - "Pop1990": 490, - "Pop1995": 580, - "Pop2000": 690, - "Pop2005": 800, - "Pop2010": 850, - "Pop2015": 930, - "Pop2020": 1050, - "Pop2025": 1150, - "Pop2050": 1230, - "Location": [ - 32.2, - 119.41 - ] - }, - { - "City": "Zhuhai", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 40, - "Pop1955": 50, - "Pop1960": 60, - "Pop1965": 70, - "Pop1970": 90, - "Pop1975": 100, - "Pop1980": 120, - "Pop1985": 190, - "Pop1990": 330, - "Pop1995": 520, - "Pop2000": 810, - "Pop2005": 960, - "Pop2010": 1020, - "Pop2015": 1110, - "Pop2020": 1250, - "Pop2025": 1370, - "Pop2050": 1468, - "Location": [ - 22.27, - 113.56 - ] - }, - { - "City": "Zhuzhou", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 130, - "Pop1955": 150, - "Pop1960": 180, - "Pop1965": 210, - "Pop1970": 250, - "Pop1975": 300, - "Pop1980": 360, - "Pop1985": 450, - "Pop1990": 580, - "Pop1995": 710, - "Pop2000": 870, - "Pop2005": 1020, - "Pop2010": 1080, - "Pop2015": 1180, - "Pop2020": 1320, - "Pop2025": 1440, - "Pop2050": 1548, - "Location": [ - 27.85, - 113.13 - ] - }, - { - "City": "Zibo", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 1450, - "Pop1955": 1550, - "Pop1960": 1660, - "Pop1965": 1780, - "Pop1970": 1900, - "Pop1975": 2030, - "Pop1980": 2170, - "Pop1985": 2320, - "Pop1990": 2480, - "Pop1995": 2640, - "Pop2000": 2810, - "Pop2005": 2980, - "Pop2010": 3060, - "Pop2015": 3210, - "Pop2020": 3520, - "Pop2025": 3810, - "Pop2050": 4053, - "Location": [ - 36.78, - 118.05 - ] - }, - { - "City": "Zigong", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 560, - "Pop1955": 600, - "Pop1960": 650, - "Pop1965": 690, - "Pop1970": 740, - "Pop1975": 800, - "Pop1980": 850, - "Pop1985": 910, - "Pop1990": 980, - "Pop1995": 1010, - "Pop2000": 1050, - "Pop2005": 1090, - "Pop2010": 1100, - "Pop2015": 1150, - "Pop2020": 1260, - "Pop2025": 1380, - "Pop2050": 1473, - "Location": [ - 29.4, - 104.78 - ] - }, - { - "City": "Zunyi", - "Country": "China", - "Country_ISO3": "CHN", - "Pop1950": 200, - "Pop1955": 220, - "Pop1960": 240, - "Pop1965": 260, - "Pop1970": 280, - "Pop1975": 300, - "Pop1980": 330, - "Pop1985": 360, - "Pop1990": 390, - "Pop1995": 520, - "Pop2000": 680, - "Pop2005": 800, - "Pop2010": 850, - "Pop2015": 920, - "Pop2020": 1040, - "Pop2025": 1140, - "Pop2050": 1223, - "Location": [ - 27.68, - 106.9 - ] - }, - { - "City": "Barranquilla", - "Country": "Colombia", - "Country_ISO3": "COL", - "Pop1950": 290, - "Pop1955": 370, - "Pop1960": 460, - "Pop1965": 560, - "Pop1970": 690, - "Pop1975": 830, - "Pop1980": 960, - "Pop1985": 1110, - "Pop1990": 1230, - "Pop1995": 1360, - "Pop2000": 1530, - "Pop2005": 1720, - "Pop2010": 1800, - "Pop2015": 1910, - "Pop2020": 2050, - "Pop2025": 2160, - "Pop2050": 2251, - "Location": [ - 10.98, - -74.8 - ] - }, - { - "City": "Bogotá", - "Country": "Colombia", - "Country_ISO3": "COL", - "Pop1950": 630, - "Pop1955": 890, - "Pop1960": 1270, - "Pop1965": 1780, - "Pop1970": 2380, - "Pop1975": 3040, - "Pop1980": 3520, - "Pop1985": 4090, - "Pop1990": 4740, - "Pop1995": 5490, - "Pop2000": 6360, - "Pop2005": 7350, - "Pop2010": 7770, - "Pop2015": 8320, - "Pop2020": 8920, - "Pop2025": 9300, - "Pop2050": 9600, - "Location": [ - 4.63, - -74.08 - ] - }, - { - "City": "Bucaramanga", - "Country": "Colombia", - "Country_ISO3": "COL", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 190, - "Pop1965": 250, - "Pop1970": 320, - "Pop1975": 410, - "Pop1980": 470, - "Pop1985": 550, - "Pop1990": 650, - "Pop1995": 760, - "Pop2000": 860, - "Pop2005": 960, - "Pop2010": 1010, - "Pop2015": 1070, - "Pop2020": 1160, - "Pop2025": 1220, - "Pop2050": 1282, - "Location": [ - 7.11, - -73.11 - ] - }, - { - "City": "Cali", - "Country": "Colombia", - "Country_ISO3": "COL", - "Pop1950": 230, - "Pop1955": 330, - "Pop1960": 470, - "Pop1965": 660, - "Pop1970": 850, - "Pop1975": 1050, - "Pop1980": 1190, - "Pop1985": 1360, - "Pop1990": 1550, - "Pop1995": 1760, - "Pop2000": 1950, - "Pop2005": 2160, - "Pop2010": 2250, - "Pop2015": 2380, - "Pop2020": 2540, - "Pop2025": 2680, - "Pop2050": 2786, - "Location": [ - 3.45, - -76.52 - ] - }, - { - "City": "Cartagena", - "Country": "Colombia", - "Country_ISO3": "COL", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 180, - "Pop1965": 230, - "Pop1970": 270, - "Pop1975": 330, - "Pop1980": 400, - "Pop1985": 490, - "Pop1990": 560, - "Pop1995": 640, - "Pop2000": 740, - "Pop2005": 840, - "Pop2010": 890, - "Pop2015": 950, - "Pop2020": 1030, - "Pop2025": 1090, - "Pop2050": 1139, - "Location": [ - 10.41, - -75.53 - ] - }, - { - "City": "Medellín", - "Country": "Colombia", - "Country_ISO3": "COL", - "Pop1950": 380, - "Pop1955": 520, - "Pop1960": 730, - "Pop1965": 990, - "Pop1970": 1260, - "Pop1975": 1540, - "Pop1980": 1730, - "Pop1985": 1950, - "Pop1990": 2140, - "Pop1995": 2370, - "Pop2000": 2720, - "Pop2005": 3130, - "Pop2010": 3300, - "Pop2015": 3520, - "Pop2020": 3790, - "Pop2025": 3980, - "Pop2050": 4129, - "Location": [ - 6.24, - -75.59 - ] - }, - { - "City": "Brazzaville", - "Country": "Congo", - "Country_ISO3": "COG", - "Pop1950": 80, - "Pop1955": 90, - "Pop1960": 120, - "Pop1965": 170, - "Pop1970": 240, - "Pop1975": 330, - "Pop1980": 450, - "Pop1985": 600, - "Pop1990": 700, - "Pop1995": 830, - "Pop2000": 990, - "Pop2005": 1220, - "Pop2010": 1360, - "Pop2015": 1500, - "Pop2020": 1730, - "Pop2025": 1940, - "Pop2050": 2150, - "Location": [ - -4.28, - 15.28 - ] - }, - { - "City": "Kananga", - "Country": "Democratic Republic of the Congo", - "Country_ISO3": "COD", - "Pop1950": 20, - "Pop1955": 50, - "Pop1960": 140, - "Pop1965": 250, - "Pop1970": 420, - "Pop1975": 370, - "Pop1980": 330, - "Pop1985": 310, - "Pop1990": 370, - "Pop1995": 470, - "Pop2000": 560, - "Pop2005": 700, - "Pop2010": 760, - "Pop2015": 880, - "Pop2020": 1110, - "Pop2025": 1380, - "Pop2050": 1698, - "Location": [ - -5.89, - 22.4 - ] - }, - { - "City": "Kinshasa", - "Country": "Democratic Republic of the Congo", - "Country_ISO3": "COD", - "Pop1950": 200, - "Pop1955": 290, - "Pop1960": 440, - "Pop1965": 720, - "Pop1970": 1070, - "Pop1975": 1480, - "Pop1980": 2050, - "Pop1985": 2790, - "Pop1990": 3450, - "Pop1995": 4450, - "Pop2000": 5480, - "Pop2005": 7110, - "Pop2010": 7840, - "Pop2015": 9050, - "Pop2020": 11310, - "Pop2025": 13880, - "Pop2050": 16762, - "Location": [ - -4.32, - 15.29 - ] - }, - { - "City": "Lubumbashi", - "Country": "Democratic Republic of the Congo", - "Country_ISO3": "COD", - "Pop1950": 100, - "Pop1955": 140, - "Pop1960": 190, - "Pop1965": 250, - "Pop1970": 320, - "Pop1975": 400, - "Pop1980": 480, - "Pop1985": 590, - "Pop1990": 690, - "Pop1995": 850, - "Pop2000": 1000, - "Pop2005": 1240, - "Pop2010": 1350, - "Pop2015": 1540, - "Pop2020": 1940, - "Pop2025": 2410, - "Pop2050": 2943, - "Location": [ - -11.68, - 27.54 - ] - }, - { - "City": "Mbuji-Mayi", - "Country": "Democratic Republic of the Congo", - "Country_ISO3": "COD", - "Pop1950": 70, - "Pop1955": 100, - "Pop1960": 140, - "Pop1965": 190, - "Pop1970": 260, - "Pop1975": 330, - "Pop1980": 410, - "Pop1985": 510, - "Pop1990": 610, - "Pop1995": 770, - "Pop2000": 930, - "Pop2005": 1180, - "Pop2010": 1300, - "Pop2015": 1490, - "Pop2020": 1880, - "Pop2025": 2330, - "Pop2050": 2851, - "Location": [ - -6.14, - 23.66 - ] - }, - { - "City": "San José", - "Country": "Costa Rica", - "Country_ISO3": "CRI", - "Pop1950": 150, - "Pop1955": 180, - "Pop1960": 230, - "Pop1965": 290, - "Pop1970": 360, - "Pop1975": 440, - "Pop1980": 530, - "Pop1985": 630, - "Pop1990": 740, - "Pop1995": 870, - "Pop2000": 1030, - "Pop2005": 1220, - "Pop2010": 1280, - "Pop2015": 1370, - "Pop2020": 1510, - "Pop2025": 1630, - "Pop2050": 1737, - "Location": [ - 9.93, - -84.07 - ] - }, - { - "City": "La Habana", - "Country": "Cuba", - "Country_ISO3": "CUB", - "Pop1950": 1120, - "Pop1955": 1290, - "Pop1960": 1440, - "Pop1965": 1600, - "Pop1970": 1780, - "Pop1975": 1850, - "Pop1980": 1910, - "Pop1985": 2000, - "Pop1990": 2110, - "Pop1995": 2180, - "Pop2000": 2190, - "Pop2005": 2190, - "Pop2010": 2170, - "Pop2015": 2160, - "Pop2020": 2150, - "Pop2025": 2150, - "Pop2050": 2150, - "Location": [ - 23.04, - -82.41 - ] - }, - { - "City": "Praha", - "Country": "Czech Republic", - "Country_ISO3": "CZE", - "Pop1950": 940, - "Pop1955": 970, - "Pop1960": 1000, - "Pop1965": 1040, - "Pop1970": 1080, - "Pop1975": 1130, - "Pop1980": 1180, - "Pop1985": 1200, - "Pop1990": 1210, - "Pop1995": 1190, - "Pop2000": 1170, - "Pop2005": 1160, - "Pop2010": 1160, - "Pop2015": 1160, - "Pop2020": 1160, - "Pop2025": 1160, - "Pop2050": 1159, - "Location": [ - 50.1, - 14.45 - ] - }, - { - "City": "Cotonou", - "Country": "Benin", - "Country_ISO3": "BEN", - "Pop1950": 20, - "Pop1955": 30, - "Pop1960": 70, - "Pop1965": 110, - "Pop1970": 160, - "Pop1975": 240, - "Pop1980": 340, - "Pop1985": 410, - "Pop1990": 500, - "Pop1995": 580, - "Pop2000": 640, - "Pop2005": 720, - "Pop2010": 760, - "Pop2015": 840, - "Pop2020": 1000, - "Pop2025": 1200, - "Pop2050": 1411, - "Location": [ - 6.35, - 2.43 - ] - }, - { - "City": "København", - "Country": "Denmark", - "Country_ISO3": "DNK", - "Pop1950": 1220, - "Pop1955": 1230, - "Pop1960": 1280, - "Pop1965": 1370, - "Pop1970": 1380, - "Pop1975": 1170, - "Pop1980": 1100, - "Pop1985": 1060, - "Pop1990": 1040, - "Pop1995": 1050, - "Pop2000": 1080, - "Pop2005": 1080, - "Pop2010": 1080, - "Pop2015": 1090, - "Pop2020": 1090, - "Pop2025": 1100, - "Pop2050": 1096, - "Location": [ - 55.71, - 12.54 - ] - }, - { - "City": "Santo Domingo", - "Country": "Dominican Republic", - "Country_ISO3": "DOM", - "Pop1950": 220, - "Pop1955": 310, - "Pop1960": 450, - "Pop1965": 610, - "Pop1970": 830, - "Pop1975": 1020, - "Pop1980": 1240, - "Pop1985": 1400, - "Pop1990": 1520, - "Pop1995": 1670, - "Pop2000": 1850, - "Pop2005": 2060, - "Pop2010": 2150, - "Pop2015": 2300, - "Pop2020": 2520, - "Pop2025": 2720, - "Pop2050": 2885, - "Location": [ - 18.48, - -69.89 - ] - }, - { - "City": "Guayaquil", - "Country": "Ecuador", - "Country_ISO3": "ECU", - "Pop1950": 260, - "Pop1955": 340, - "Pop1960": 460, - "Pop1965": 580, - "Pop1970": 720, - "Pop1975": 890, - "Pop1980": 1120, - "Pop1985": 1350, - "Pop1990": 1570, - "Pop1995": 1810, - "Pop2000": 2080, - "Pop2005": 2390, - "Pop2010": 2510, - "Pop2015": 2690, - "Pop2020": 2940, - "Pop2025": 3150, - "Pop2050": 3328, - "Location": [ - -2.2, - -79.9 - ] - }, - { - "City": "Quito", - "Country": "Ecuador", - "Country_ISO3": "ECU", - "Pop1950": 210, - "Pop1955": 260, - "Pop1960": 320, - "Pop1965": 400, - "Pop1970": 500, - "Pop1975": 630, - "Pop1980": 780, - "Pop1985": 940, - "Pop1990": 1090, - "Pop1995": 1220, - "Pop2000": 1360, - "Pop2005": 1590, - "Pop2010": 1700, - "Pop2015": 1850, - "Pop2020": 2040, - "Pop2025": 2190, - "Pop2050": 2316, - "Location": [ - -0.22, - -78.52 - ] - }, - { - "City": "San Salvador", - "Country": "El Salvador", - "Country_ISO3": "SLV", - "Pop1950": 190, - "Pop1955": 250, - "Pop1960": 310, - "Pop1965": 390, - "Pop1970": 500, - "Pop1975": 600, - "Pop1980": 700, - "Pop1985": 820, - "Pop1990": 970, - "Pop1995": 1110, - "Pop2000": 1230, - "Pop2005": 1370, - "Pop2010": 1430, - "Pop2015": 1520, - "Pop2020": 1650, - "Pop2025": 1780, - "Pop2050": 1902, - "Location": [ - 13.7, - -89.2 - ] - }, - { - "City": "Addis Ababa", - "Country": "Ethiopia", - "Country_ISO3": "ETH", - "Pop1950": 390, - "Pop1955": 450, - "Pop1960": 520, - "Pop1965": 600, - "Pop1970": 730, - "Pop1975": 930, - "Pop1980": 1180, - "Pop1985": 1480, - "Pop1990": 1790, - "Pop1995": 2160, - "Pop2000": 2490, - "Pop2005": 2900, - "Pop2010": 3100, - "Pop2015": 3450, - "Pop2020": 4180, - "Pop2025": 5080, - "Pop2050": 6156, - "Location": [ - 9.02, - 38.7 - ] - }, - { - "City": "Huambo", - "Country": "Angola", - "Country_ISO3": "AGO", - "Pop1950": 20, - "Pop1955": 20, - "Pop1960": 40, - "Pop1965": 50, - "Pop1970": 60, - "Pop1975": 100, - "Pop1980": 150, - "Pop1985": 230, - "Pop1990": 330, - "Pop1995": 440, - "Pop2000": 580, - "Pop2005": 780, - "Pop2010": 870, - "Pop2015": 1040, - "Pop2020": 1310, - "Pop2025": 1570, - "Pop2050": 1824, - "Location": [ - -12.76, - 15.73 - ] - }, - { - "City": "Luanda", - "Country": "Angola", - "Country_ISO3": "AGO", - "Pop1950": 140, - "Pop1955": 170, - "Pop1960": 220, - "Pop1965": 320, - "Pop1970": 460, - "Pop1975": 660, - "Pop1980": 960, - "Pop1985": 1300, - "Pop1990": 1570, - "Pop1995": 1950, - "Pop2000": 2590, - "Pop2005": 3530, - "Pop2010": 4000, - "Pop2015": 4780, - "Pop2020": 6040, - "Pop2025": 7150, - "Pop2050": 8236, - "Location": [ - -8.81, - 13.23 - ] - }, - { - "City": "Helsinki", - "Country": "Finland", - "Country_ISO3": "FIN", - "Pop1950": 370, - "Pop1955": 400, - "Pop1960": 450, - "Pop1965": 480, - "Pop1970": 510, - "Pop1975": 580, - "Pop1980": 670, - "Pop1985": 720, - "Pop1990": 870, - "Pop1995": 940, - "Pop2000": 1020, - "Pop2005": 1090, - "Pop2010": 1120, - "Pop2015": 1140, - "Pop2020": 1170, - "Pop2025": 1200, - "Pop2050": 1220, - "Location": [ - 60.19, - 24.97 - ] - }, - { - "City": "Bordeaux", - "Country": "France", - "Country_ISO3": "FRA", - "Pop1950": 430, - "Pop1955": 450, - "Pop1960": 500, - "Pop1965": 540, - "Pop1970": 580, - "Pop1975": 610, - "Pop1980": 630, - "Pop1985": 660, - "Pop1990": 700, - "Pop1995": 730, - "Pop2000": 760, - "Pop2005": 790, - "Pop2010": 800, - "Pop2015": 820, - "Pop2020": 840, - "Pop2025": 850, - "Pop2050": 869, - "Location": [ - 44.84, - -0.59 - ] - }, - { - "City": "Lille", - "Country": "France", - "Country_ISO3": "FRA", - "Pop1950": 750, - "Pop1955": 770, - "Pop1960": 810, - "Pop1965": 860, - "Pop1970": 910, - "Pop1975": 940, - "Pop1980": 940, - "Pop1985": 950, - "Pop1990": 960, - "Pop1995": 980, - "Pop2000": 1010, - "Pop2005": 1030, - "Pop2010": 1040, - "Pop2015": 1060, - "Pop2020": 1080, - "Pop2025": 1100, - "Pop2050": 1120, - "Location": [ - 50.63, - 3.06 - ] - }, - { - "City": "Lyon", - "Country": "France", - "Country_ISO3": "FRA", - "Pop1950": 730, - "Pop1955": 770, - "Pop1960": 900, - "Pop1965": 1030, - "Pop1970": 1120, - "Pop1975": 1170, - "Pop1980": 1210, - "Pop1985": 1240, - "Pop1990": 1260, - "Pop1995": 1310, - "Pop2000": 1360, - "Pop2005": 1410, - "Pop2010": 1420, - "Pop2015": 1440, - "Pop2020": 1470, - "Pop2025": 1500, - "Pop2050": 1516, - "Location": [ - 45.74, - 4.85 - ] - }, - { - "City": "Marseille-Aix-en-Provence", - "Country": "France", - "Country_ISO3": "FRA", - "Pop1950": 760, - "Pop1955": 800, - "Pop1960": 930, - "Pop1965": 1070, - "Pop1970": 1180, - "Pop1975": 1250, - "Pop1980": 1300, - "Pop1985": 1310, - "Pop1990": 1300, - "Pop1995": 1330, - "Pop2000": 1360, - "Pop2005": 1390, - "Pop2010": 1400, - "Pop2015": 1420, - "Pop2020": 1440, - "Pop2025": 1470, - "Pop2050": 1490, - "Location": [ - 43.28, - 5.38 - ] - }, - { - "City": "Nice-Cannes", - "Country": "France", - "Country_ISO3": "FRA", - "Pop1950": 400, - "Pop1955": 430, - "Pop1960": 500, - "Pop1965": 570, - "Pop1970": 640, - "Pop1975": 700, - "Pop1980": 730, - "Pop1985": 790, - "Pop1990": 850, - "Pop1995": 870, - "Pop2000": 890, - "Pop2005": 920, - "Pop2010": 930, - "Pop2015": 940, - "Pop2020": 960, - "Pop2025": 980, - "Pop2050": 997, - "Location": [ - 43.55, - 7.01 - ] - }, - { - "City": "Paris", - "Country": "France", - "Country_ISO3": "FRA", - "Pop1950": 6520, - "Pop1955": 6800, - "Pop1960": 7410, - "Pop1965": 7970, - "Pop1970": 8350, - "Pop1975": 8560, - "Pop1980": 8670, - "Pop1985": 8960, - "Pop1990": 9330, - "Pop1995": 9510, - "Pop2000": 9690, - "Pop2005": 9850, - "Pop2010": 9900, - "Pop2015": 9960, - "Pop2020": 10010, - "Pop2025": 10030, - "Pop2050": 10036, - "Location": [ - 48.88, - 2.43 - ] - }, - { - "City": "Toulouse", - "Country": "France", - "Country_ISO3": "FRA", - "Pop1950": 270, - "Pop1955": 280, - "Pop1960": 350, - "Pop1965": 410, - "Pop1970": 470, - "Pop1975": 510, - "Pop1980": 530, - "Pop1985": 580, - "Pop1990": 650, - "Pop1995": 710, - "Pop2000": 780, - "Pop2005": 830, - "Pop2010": 850, - "Pop2015": 860, - "Pop2020": 880, - "Pop2025": 900, - "Pop2050": 916, - "Location": [ - 43.59, - 1.43 - ] - }, - { - "City": "Tbilisi", - "Country": "Georgia", - "Country_ISO3": "GEO", - "Pop1950": 610, - "Pop1955": 660, - "Pop1960": 720, - "Pop1965": 800, - "Pop1970": 900, - "Pop1975": 990, - "Pop1980": 1090, - "Pop1985": 1180, - "Pop1990": 1220, - "Pop1995": 1160, - "Pop2000": 1100, - "Pop2005": 1090, - "Pop2010": 1100, - "Pop2015": 1110, - "Pop2020": 1110, - "Pop2025": 1110, - "Pop2050": 1114, - "Location": [ - 41.72, - 44.78 - ] - }, - { - "City": "Berlin", - "Country": "Germany", - "Country_ISO3": "DEU", - "Pop1950": 3350, - "Pop1955": 3300, - "Pop1960": 3260, - "Pop1965": 3230, - "Pop1970": 3210, - "Pop1975": 3130, - "Pop1980": 3060, - "Pop1985": 3060, - "Pop1990": 3420, - "Pop1995": 3470, - "Pop2000": 3380, - "Pop2005": 3390, - "Pop2010": 3410, - "Pop2015": 3420, - "Pop2020": 3430, - "Pop2025": 3440, - "Pop2050": 3436, - "Location": [ - 52.51, - 13.32 - ] - }, - { - "City": "Hamburg", - "Country": "Germany", - "Country_ISO3": "DEU", - "Pop1950": 1610, - "Pop1955": 1700, - "Pop1960": 1810, - "Pop1965": 1820, - "Pop1970": 1790, - "Pop1975": 1720, - "Pop1980": 1650, - "Pop1985": 1590, - "Pop1990": 1640, - "Pop1995": 1710, - "Pop2000": 1710, - "Pop2005": 1740, - "Pop2010": 1760, - "Pop2015": 1780, - "Pop2020": 1790, - "Pop2025": 1790, - "Pop2050": 1792, - "Location": [ - 53.57, - 10.02 - ] - }, - { - "City": "Köln", - "Country": "Germany", - "Country_ISO3": "DEU", - "Pop1950": 600, - "Pop1955": 680, - "Pop1960": 790, - "Pop1965": 830, - "Pop1970": 850, - "Pop1975": 910, - "Pop1980": 970, - "Pop1985": 920, - "Pop1990": 950, - "Pop1995": 960, - "Pop2000": 960, - "Pop2005": 980, - "Pop2010": 1000, - "Pop2015": 1040, - "Pop2020": 1060, - "Pop2025": 1060, - "Pop2050": 1061, - "Location": [ - 50.94, - 6.93 - ] - }, - { - "City": "München", - "Country": "Germany", - "Country_ISO3": "DEU", - "Pop1950": 830, - "Pop1955": 940, - "Pop1960": 1060, - "Pop1965": 1180, - "Pop1970": 1290, - "Pop1975": 1300, - "Pop1980": 1300, - "Pop1985": 1270, - "Pop1990": 1220, - "Pop1995": 1240, - "Pop2000": 1200, - "Pop2005": 1250, - "Pop2010": 1280, - "Pop2015": 1300, - "Pop2020": 1320, - "Pop2025": 1320, - "Pop2050": 1318, - "Location": [ - 48.14, - 11.54 - ] - }, - { - "City": "Accra", - "Country": "Ghana", - "Country_ISO3": "GHA", - "Pop1950": 180, - "Pop1955": 260, - "Pop1960": 390, - "Pop1965": 500, - "Pop1970": 630, - "Pop1975": 740, - "Pop1980": 860, - "Pop1985": 1010, - "Pop1990": 1200, - "Pop1995": 1420, - "Pop2000": 1670, - "Pop2005": 1980, - "Pop2010": 2120, - "Pop2015": 2330, - "Pop2020": 2690, - "Pop2025": 3040, - "Pop2050": 3382, - "Location": [ - 5.55, - -0.2 - ] - }, - { - "City": "Kumasi", - "Country": "Ghana", - "Country_ISO3": "GHA", - "Pop1950": 100, - "Pop1955": 150, - "Pop1960": 220, - "Pop1965": 280, - "Pop1970": 350, - "Pop1975": 400, - "Pop1980": 450, - "Pop1985": 530, - "Pop1990": 700, - "Pop1995": 910, - "Pop2000": 1190, - "Pop2005": 1520, - "Pop2010": 1650, - "Pop2015": 1830, - "Pop2020": 2110, - "Pop2025": 2390, - "Pop2050": 2667, - "Location": [ - 6.68, - -1.62 - ] - }, - { - "City": "Athínai", - "Country": "Greece", - "Country_ISO3": "GRC", - "Pop1950": 1350, - "Pop1955": 1560, - "Pop1960": 1810, - "Pop1965": 2120, - "Pop1970": 2480, - "Pop1975": 2740, - "Pop1980": 2990, - "Pop1985": 3050, - "Pop1990": 3070, - "Pop1995": 3120, - "Pop2000": 3180, - "Pop2005": 3230, - "Pop2010": 3240, - "Pop2015": 3260, - "Pop2020": 3280, - "Pop2025": 3300, - "Pop2050": 3326, - "Location": [ - 37.94, - 23.65 - ] - }, - { - "City": "Thessaloniki", - "Country": "Greece", - "Country_ISO3": "GRC", - "Pop1950": 290, - "Pop1955": 330, - "Pop1960": 370, - "Pop1965": 450, - "Pop1970": 540, - "Pop1975": 620, - "Pop1980": 690, - "Pop1985": 720, - "Pop1990": 750, - "Pop1995": 770, - "Pop2000": 800, - "Pop2005": 820, - "Pop2010": 830, - "Pop2015": 840, - "Pop2020": 850, - "Pop2025": 860, - "Pop2050": 880, - "Location": [ - 40.62, - 22.79 - ] - }, - { - "City": "Baku", - "Country": "Azerbaijan", - "Country_ISO3": "AZE", - "Pop1950": 900, - "Pop1955": 940, - "Pop1960": 1000, - "Pop1965": 1130, - "Pop1970": 1270, - "Pop1975": 1430, - "Pop1980": 1570, - "Pop1985": 1660, - "Pop1990": 1730, - "Pop1995": 1770, - "Pop2000": 1810, - "Pop2005": 1870, - "Pop2010": 1890, - "Pop2015": 1930, - "Pop2020": 2010, - "Pop2025": 2100, - "Pop2050": 2187, - "Location": [ - 40.32, - 49.81 - ] - }, - { - "City": "Buenos Aires", - "Country": "Argentina", - "Country_ISO3": "ARG", - "Pop1950": 5100, - "Pop1955": 5800, - "Pop1960": 6600, - "Pop1965": 7320, - "Pop1970": 8100, - "Pop1975": 8740, - "Pop1980": 9420, - "Pop1985": 9960, - "Pop1990": 10510, - "Pop1995": 11150, - "Pop2000": 11850, - "Pop2005": 12550, - "Pop2010": 12800, - "Pop2015": 13090, - "Pop2020": 13430, - "Pop2025": 13650, - "Pop2050": 13768, - "Location": [ - -34.62, - -58.44 - ] - }, - { - "City": "Córdoba", - "Country": "Argentina", - "Country_ISO3": "ARG", - "Pop1950": 430, - "Pop1955": 510, - "Pop1960": 600, - "Pop1965": 700, - "Pop1970": 810, - "Pop1975": 900, - "Pop1980": 1010, - "Pop1985": 1100, - "Pop1990": 1200, - "Pop1995": 1280, - "Pop2000": 1350, - "Pop2005": 1420, - "Pop2010": 1450, - "Pop2015": 1490, - "Pop2020": 1560, - "Pop2025": 1610, - "Pop2050": 1645, - "Location": [ - -31.31, - -64.17 - ] - }, - { - "City": "Mendoza", - "Country": "Argentina", - "Country_ISO3": "ARG", - "Pop1950": 250, - "Pop1955": 280, - "Pop1960": 330, - "Pop1965": 390, - "Pop1970": 470, - "Pop1975": 540, - "Pop1980": 610, - "Pop1985": 680, - "Pop1990": 760, - "Pop1995": 800, - "Pop2000": 840, - "Pop2005": 880, - "Pop2010": 890, - "Pop2015": 920, - "Pop2020": 960, - "Pop2025": 990, - "Pop2050": 1020, - "Location": [ - -32.89, - -68.83 - ] - }, - { - "City": "Rosario", - "Country": "Argentina", - "Country_ISO3": "ARG", - "Pop1950": 550, - "Pop1955": 610, - "Pop1960": 670, - "Pop1965": 740, - "Pop1970": 820, - "Pop1975": 880, - "Pop1980": 950, - "Pop1985": 1020, - "Pop1990": 1080, - "Pop1995": 1120, - "Pop2000": 1150, - "Pop2005": 1190, - "Pop2010": 1200, - "Pop2015": 1230, - "Pop2020": 1280, - "Pop2025": 1330, - "Pop2050": 1360, - "Location": [ - -32.93, - -60.66 - ] - }, - { - "City": "San Miguel de Tucumán", - "Country": "Argentina", - "Country_ISO3": "ARG", - "Pop1950": 220, - "Pop1955": 260, - "Pop1960": 300, - "Pop1965": 330, - "Pop1970": 360, - "Pop1975": 420, - "Pop1980": 490, - "Pop1985": 550, - "Pop1990": 610, - "Pop1995": 670, - "Pop2000": 720, - "Pop2005": 780, - "Pop2010": 800, - "Pop2015": 830, - "Pop2020": 870, - "Pop2025": 900, - "Pop2050": 928, - "Location": [ - -26.82, - -65.21 - ] - }, - { - "City": "Ciudad de Guatemala (Guatemala City)", - "Country": "Guatemala", - "Country_ISO3": "GTM", - "Pop1950": 290, - "Pop1955": 370, - "Pop1960": 480, - "Pop1965": 590, - "Pop1970": 660, - "Pop1975": 720, - "Pop1980": 750, - "Pop1985": 780, - "Pop1990": 800, - "Pop1995": 840, - "Pop2000": 910, - "Pop2005": 980, - "Pop2010": 1020, - "Pop2015": 1100, - "Pop2020": 1280, - "Pop2025": 1480, - "Pop2050": 1690, - "Location": [ - 14.61, - -90.52 - ] - }, - { - "City": "Conakry", - "Country": "Guinea", - "Country_ISO3": "GIN", - "Pop1950": 30, - "Pop1955": 60, - "Pop1960": 110, - "Pop1965": 210, - "Pop1970": 390, - "Pop1975": 530, - "Pop1980": 660, - "Pop1985": 770, - "Pop1990": 900, - "Pop1995": 1040, - "Pop2000": 1220, - "Pop2005": 1410, - "Pop2010": 1490, - "Pop2015": 1640, - "Pop2020": 1980, - "Pop2025": 2390, - "Pop2050": 2856, - "Location": [ - 9.54, - -13.67 - ] - }, - { - "City": "Port-au-Prince", - "Country": "Haiti", - "Country_ISO3": "HTI", - "Pop1950": 130, - "Pop1955": 180, - "Pop1960": 250, - "Pop1965": 340, - "Pop1970": 460, - "Pop1975": 580, - "Pop1980": 700, - "Pop1985": 880, - "Pop1990": 1130, - "Pop1995": 1430, - "Pop2000": 1650, - "Pop2005": 1880, - "Pop2010": 2000, - "Pop2015": 2210, - "Pop2020": 2620, - "Pop2025": 3010, - "Pop2050": 3346, - "Location": [ - 18.52, - -72.34 - ] - }, - { - "City": "Tegucigalpa", - "Country": "Honduras", - "Country_ISO3": "HND", - "Pop1950": 70, - "Pop1955": 100, - "Pop1960": 130, - "Pop1965": 170, - "Pop1970": 220, - "Pop1975": 290, - "Pop1980": 370, - "Pop1985": 470, - "Pop1990": 580, - "Pop1995": 680, - "Pop2000": 790, - "Pop2005": 900, - "Pop2010": 950, - "Pop2015": 1020, - "Pop2020": 1160, - "Pop2025": 1320, - "Pop2050": 1472, - "Location": [ - 14.09, - -87.2 - ] - }, - { - "City": "Hong Kong", - "Country": "China, Hong Kong Special Administrative Region", - "Country_ISO3": "CHN", - "Pop1950": 1680, - "Pop1955": 2120, - "Pop1960": 2620, - "Pop1965": 3190, - "Pop1970": 3460, - "Pop1975": 3940, - "Pop1980": 4610, - "Pop1985": 5070, - "Pop1990": 5680, - "Pop1995": 6210, - "Pop2000": 6660, - "Pop2005": 7060, - "Pop2010": 7210, - "Pop2015": 7420, - "Pop2020": 7740, - "Pop2025": 8040, - "Pop2050": 8305, - "Location": [ - 22.27, - 114.17 - ] - }, - { - "City": "Budapest", - "Country": "Hungary", - "Country_ISO3": "HUN", - "Pop1950": 1620, - "Pop1955": 1710, - "Pop1960": 1810, - "Pop1965": 1880, - "Pop1970": 1950, - "Pop1975": 2000, - "Pop1980": 2060, - "Pop1985": 2040, - "Pop1990": 2000, - "Pop1995": 1890, - "Pop2000": 1790, - "Pop2005": 1690, - "Pop2010": 1680, - "Pop2015": 1660, - "Pop2020": 1660, - "Pop2025": 1660, - "Pop2050": 1655, - "Location": [ - 47.51, - 19.09 - ] - }, - { - "City": "Agra", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 370, - "Pop1955": 430, - "Pop1960": 500, - "Pop1965": 560, - "Pop1970": 620, - "Pop1975": 680, - "Pop1980": 740, - "Pop1985": 830, - "Pop1990": 930, - "Pop1995": 1100, - "Pop2000": 1290, - "Pop2005": 1510, - "Pop2010": 1590, - "Pop2015": 1700, - "Pop2020": 1900, - "Pop2025": 2120, - "Pop2050": 2364, - "Location": [ - 27.18, - 78.02 - ] - }, - { - "City": "Ahmadabad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 860, - "Pop1955": 1010, - "Pop1960": 1180, - "Pop1965": 1410, - "Pop1970": 1700, - "Pop1975": 2050, - "Pop1980": 2480, - "Pop1985": 2860, - "Pop1990": 3260, - "Pop1995": 3790, - "Pop2000": 4430, - "Pop2005": 5120, - "Pop2010": 5380, - "Pop2015": 5730, - "Pop2020": 6320, - "Pop2025": 6990, - "Pop2050": 7735, - "Location": [ - 23.03, - 72.56 - ] - }, - { - "City": "Aligarh", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 140, - "Pop1955": 160, - "Pop1960": 180, - "Pop1965": 210, - "Pop1970": 250, - "Pop1975": 280, - "Pop1980": 320, - "Pop1985": 380, - "Pop1990": 470, - "Pop1995": 550, - "Pop2000": 650, - "Pop2005": 760, - "Pop2010": 800, - "Pop2015": 860, - "Pop2020": 970, - "Pop2025": 1080, - "Pop2050": 1215, - "Location": [ - 27.88, - 78.08 - ] - }, - { - "City": "Allahabad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 330, - "Pop1955": 370, - "Pop1960": 420, - "Pop1965": 460, - "Pop1970": 510, - "Pop1975": 570, - "Pop1980": 640, - "Pop1985": 730, - "Pop1990": 830, - "Pop1995": 930, - "Pop2000": 1040, - "Pop2005": 1150, - "Pop2010": 1200, - "Pop2015": 1280, - "Pop2020": 1420, - "Pop2025": 1590, - "Pop2050": 1781, - "Location": [ - 25.45, - 81.85 - ] - }, - { - "City": "Amritsar", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 340, - "Pop1955": 360, - "Pop1960": 390, - "Pop1965": 420, - "Pop1970": 450, - "Pop1975": 520, - "Pop1980": 600, - "Pop1985": 660, - "Pop1990": 730, - "Pop1995": 840, - "Pop2000": 990, - "Pop2005": 1150, - "Pop2010": 1210, - "Pop2015": 1300, - "Pop2020": 1450, - "Pop2025": 1620, - "Pop2050": 1811, - "Location": [ - 31.63, - 74.87 - ] - }, - { - "City": "Asansol", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 90, - "Pop1955": 120, - "Pop1960": 160, - "Pop1965": 200, - "Pop1970": 240, - "Pop1975": 290, - "Pop1980": 360, - "Pop1985": 500, - "Pop1990": 730, - "Pop1995": 890, - "Pop2000": 1060, - "Pop2005": 1260, - "Pop2010": 1330, - "Pop2015": 1420, - "Pop2020": 1590, - "Pop2025": 1780, - "Pop2050": 1985, - "Location": [ - 23.68, - 86.98 - ] - }, - { - "City": "Aurangabad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 60, - "Pop1955": 80, - "Pop1960": 100, - "Pop1965": 120, - "Pop1970": 160, - "Pop1975": 220, - "Pop1980": 300, - "Pop1985": 420, - "Pop1990": 570, - "Pop1995": 710, - "Pop2000": 870, - "Pop2005": 1050, - "Pop2010": 1110, - "Pop2015": 1200, - "Pop2020": 1340, - "Pop2025": 1500, - "Pop2050": 1678, - "Location": [ - 19.78, - 75.29 - ] - }, - { - "City": "Bangalore", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 750, - "Pop1955": 940, - "Pop1960": 1170, - "Pop1965": 1380, - "Pop1970": 1620, - "Pop1975": 2110, - "Pop1980": 2810, - "Pop1985": 3400, - "Pop1990": 4040, - "Pop1995": 4740, - "Pop2000": 5570, - "Pop2005": 6460, - "Pop2010": 6790, - "Pop2015": 7230, - "Pop2020": 7970, - "Pop2025": 8800, - "Pop2050": 9719, - "Location": [ - 12.97, - 77.58 - ] - }, - { - "City": "Bareilly", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 210, - "Pop1955": 230, - "Pop1960": 270, - "Pop1965": 300, - "Pop1970": 320, - "Pop1975": 370, - "Pop1980": 440, - "Pop1985": 520, - "Pop1990": 600, - "Pop1995": 660, - "Pop2000": 720, - "Pop2005": 790, - "Pop2010": 820, - "Pop2015": 870, - "Pop2020": 970, - "Pop2025": 1090, - "Pop2050": 1219, - "Location": [ - 28.55, - 80.12 - ] - }, - { - "City": "Bhiwandi", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 20, - "Pop1955": 30, - "Pop1960": 50, - "Pop1965": 60, - "Pop1970": 80, - "Pop1975": 90, - "Pop1980": 110, - "Pop1985": 200, - "Pop1990": 360, - "Pop1995": 480, - "Pop2000": 600, - "Pop2005": 740, - "Pop2010": 800, - "Pop2015": 860, - "Pop2020": 960, - "Pop2025": 1080, - "Pop2050": 1212, - "Location": [ - 19.29, - 73.06 - ] - }, - { - "City": "Bhopal", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 100, - "Pop1955": 140, - "Pop1960": 210, - "Pop1965": 280, - "Pop1970": 370, - "Pop1975": 490, - "Pop1980": 660, - "Pop1985": 830, - "Pop1990": 1050, - "Pop1995": 1230, - "Pop2000": 1430, - "Pop2005": 1640, - "Pop2010": 1730, - "Pop2015": 1840, - "Pop2020": 2050, - "Pop2025": 2290, - "Pop2050": 2553, - "Location": [ - 23.22, - 77.41 - ] - }, - { - "City": "Bhubaneswar", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 20, - "Pop1955": 20, - "Pop1960": 40, - "Pop1965": 60, - "Pop1970": 100, - "Pop1975": 140, - "Pop1980": 210, - "Pop1985": 290, - "Pop1990": 400, - "Pop1995": 500, - "Pop2000": 640, - "Pop2005": 790, - "Pop2010": 840, - "Pop2015": 910, - "Pop2020": 1020, - "Pop2025": 1150, - "Pop2050": 1286, - "Location": [ - 20.26, - 85.83 - ] - }, - { - "City": "Chandigarh", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 40, - "Pop1955": 60, - "Pop1960": 90, - "Pop1965": 140, - "Pop1970": 220, - "Pop1975": 300, - "Pop1980": 410, - "Pop1985": 480, - "Pop1990": 560, - "Pop1995": 670, - "Pop2000": 790, - "Pop2005": 930, - "Pop2010": 980, - "Pop2015": 1050, - "Pop2020": 1170, - "Pop2025": 1310, - "Pop2050": 1472, - "Location": [ - 30.73, - 76.78 - ] - }, - { - "City": "Chennai", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 1490, - "Pop1955": 1700, - "Pop1960": 1920, - "Pop1965": 2400, - "Pop1970": 3060, - "Pop1975": 3610, - "Pop1980": 4200, - "Pop1985": 4750, - "Pop1990": 5340, - "Pop1995": 5840, - "Pop2000": 6350, - "Pop2005": 6920, - "Pop2010": 7160, - "Pop2015": 7560, - "Pop2020": 8310, - "Pop2025": 9170, - "Pop2050": 10129, - "Location": [ - 13.06, - 80.24 - ] - }, - { - "City": "Coimbatore", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 280, - "Pop1955": 350, - "Pop1960": 440, - "Pop1965": 560, - "Pop1970": 710, - "Pop1975": 810, - "Pop1980": 910, - "Pop1985": 1000, - "Pop1990": 1090, - "Pop1995": 1240, - "Pop2000": 1420, - "Pop2005": 1620, - "Pop2010": 1700, - "Pop2015": 1810, - "Pop2020": 2010, - "Pop2025": 2240, - "Pop2050": 2503, - "Location": [ - 11.01, - 76.97 - ] - }, - { - "City": "Delhi", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 1370, - "Pop1955": 1780, - "Pop1960": 2280, - "Pop1965": 2840, - "Pop1970": 3530, - "Pop1975": 4430, - "Pop1980": 5560, - "Pop1985": 6770, - "Pop1990": 8210, - "Pop1995": 10090, - "Pop2000": 12440, - "Pop2005": 15050, - "Pop2010": 15930, - "Pop2015": 17020, - "Pop2020": 18670, - "Pop2025": 20480, - "Pop2050": 22498, - "Location": [ - 28.66, - 77.21 - ] - }, - { - "City": "Dhanbad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 70, - "Pop1955": 110, - "Pop1960": 190, - "Pop1965": 280, - "Pop1970": 410, - "Pop1975": 520, - "Pop1980": 660, - "Pop1985": 730, - "Pop1990": 800, - "Pop1995": 920, - "Pop2000": 1050, - "Pop2005": 1190, - "Pop2010": 1250, - "Pop2015": 1330, - "Pop2020": 1480, - "Pop2025": 1660, - "Pop2050": 1852, - "Location": [ - 23.8, - 86.45 - ] - }, - { - "City": "Durg-Bhilainagar", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 20, - "Pop1955": 50, - "Pop1960": 120, - "Pop1965": 170, - "Pop1970": 230, - "Pop1975": 330, - "Pop1980": 470, - "Pop1985": 570, - "Pop1990": 670, - "Pop1995": 780, - "Pop2000": 900, - "Pop2005": 1040, - "Pop2010": 1100, - "Pop2015": 1170, - "Pop2020": 1310, - "Pop2025": 1460, - "Pop2050": 1640, - "Location": [ - 21.22, - 81.43 - ] - }, - { - "City": "Faridabad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 20, - "Pop1955": 30, - "Pop1960": 40, - "Pop1965": 60, - "Pop1970": 80, - "Pop1975": 150, - "Pop1980": 300, - "Pop1985": 430, - "Pop1990": 590, - "Pop1995": 780, - "Pop2000": 1020, - "Pop2005": 1300, - "Pop2010": 1390, - "Pop2015": 1510, - "Pop2020": 1690, - "Pop2025": 1890, - "Pop2050": 2109, - "Location": [ - 28.42, - 77.3 - ] - }, - { - "City": "Ghaziabad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 40, - "Pop1955": 50, - "Pop1960": 70, - "Pop1965": 90, - "Pop1970": 120, - "Pop1975": 180, - "Pop1980": 270, - "Pop1985": 370, - "Pop1990": 490, - "Pop1995": 680, - "Pop2000": 930, - "Pop2005": 1240, - "Pop2010": 1340, - "Pop2015": 1460, - "Pop2020": 1640, - "Pop2025": 1830, - "Pop2050": 2046, - "Location": [ - 28.67, - 77.42 - ] - }, - { - "City": "Guwahati", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 40, - "Pop1955": 70, - "Pop1960": 130, - "Pop1965": 160, - "Pop1970": 200, - "Pop1975": 250, - "Pop1980": 330, - "Pop1985": 430, - "Pop1990": 560, - "Pop1995": 680, - "Pop2000": 800, - "Pop2005": 930, - "Pop2010": 980, - "Pop2015": 1050, - "Pop2020": 1180, - "Pop2025": 1320, - "Pop2050": 1477, - "Location": [ - 26.17, - 91.77 - ] - }, - { - "City": "Gwalior", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 240, - "Pop1955": 270, - "Pop1960": 300, - "Pop1965": 340, - "Pop1970": 400, - "Pop1975": 460, - "Pop1980": 540, - "Pop1985": 620, - "Pop1990": 710, - "Pop1995": 780, - "Pop2000": 860, - "Pop2005": 940, - "Pop2010": 980, - "Pop2015": 1040, - "Pop2020": 1160, - "Pop2025": 1300, - "Pop2050": 1455, - "Location": [ - 26.14, - 78.1 - ] - }, - { - "City": "Hubli-Dharwad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 190, - "Pop1955": 220, - "Pop1960": 240, - "Pop1965": 300, - "Pop1970": 370, - "Pop1975": 440, - "Pop1980": 520, - "Pop1985": 580, - "Pop1990": 640, - "Pop1995": 700, - "Pop2000": 780, - "Pop2005": 860, - "Pop2010": 890, - "Pop2015": 950, - "Pop2020": 1060, - "Pop2025": 1180, - "Pop2050": 1327, - "Location": [ - 15.36, - 75.08 - ] - }, - { - "City": "Hyderabad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 1100, - "Pop1955": 1180, - "Pop1960": 1240, - "Pop1965": 1460, - "Pop1970": 1750, - "Pop1975": 2090, - "Pop1980": 2490, - "Pop1985": 3210, - "Pop1990": 4190, - "Pop1995": 4820, - "Pop2000": 5440, - "Pop2005": 6120, - "Pop2010": 6380, - "Pop2015": 6760, - "Pop2020": 7450, - "Pop2025": 8220, - "Pop2050": 9092, - "Location": [ - 17.39, - 78.48 - ] - }, - { - "City": "Indore", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 300, - "Pop1955": 340, - "Pop1960": 390, - "Pop1965": 460, - "Pop1970": 550, - "Pop1975": 660, - "Pop1980": 810, - "Pop1985": 940, - "Pop1990": 1090, - "Pop1995": 1310, - "Pop2000": 1600, - "Pop2005": 1910, - "Pop2010": 2030, - "Pop2015": 2180, - "Pop2020": 2420, - "Pop2025": 2700, - "Pop2050": 3005, - "Location": [ - 22.42, - 75.54 - ] - }, - { - "City": "Jabalpur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 250, - "Pop1955": 300, - "Pop1960": 360, - "Pop1965": 430, - "Pop1970": 520, - "Pop1975": 620, - "Pop1980": 740, - "Pop1985": 810, - "Pop1990": 880, - "Pop1995": 980, - "Pop2000": 1100, - "Pop2005": 1230, - "Pop2010": 1280, - "Pop2015": 1370, - "Pop2020": 1520, - "Pop2025": 1700, - "Pop2050": 1904, - "Location": [ - 23.15, - 79.97 - ] - }, - { - "City": "Jaipur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 290, - "Pop1955": 350, - "Pop1960": 400, - "Pop1965": 500, - "Pop1970": 620, - "Pop1975": 780, - "Pop1980": 980, - "Pop1985": 1210, - "Pop1990": 1480, - "Pop1995": 1830, - "Pop2000": 2260, - "Pop2005": 2750, - "Pop2010": 2920, - "Pop2015": 3140, - "Pop2020": 3480, - "Pop2025": 3870, - "Pop2050": 4298, - "Location": [ - 26.9, - 75.8 - ] - }, - { - "City": "Jalandhar", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 170, - "Pop1955": 190, - "Pop1960": 220, - "Pop1965": 250, - "Pop1970": 290, - "Pop1975": 340, - "Pop1980": 400, - "Pop1985": 450, - "Pop1990": 500, - "Pop1995": 590, - "Pop2000": 690, - "Pop2005": 810, - "Pop2010": 860, - "Pop2015": 920, - "Pop2020": 1030, - "Pop2025": 1150, - "Pop2050": 1290, - "Location": [ - 31.32, - 75.57 - ] - }, - { - "City": "Jammu", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 80, - "Pop1955": 90, - "Pop1960": 110, - "Pop1965": 130, - "Pop1970": 160, - "Pop1975": 190, - "Pop1980": 220, - "Pop1985": 280, - "Pop1990": 360, - "Pop1995": 460, - "Pop2000": 590, - "Pop2005": 740, - "Pop2010": 790, - "Pop2015": 860, - "Pop2020": 960, - "Pop2025": 1080, - "Pop2050": 1211, - "Location": [ - 33.45, - 76.24 - ] - }, - { - "City": "Jamshedpur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 210, - "Pop1955": 260, - "Pop1960": 320, - "Pop1965": 380, - "Pop1970": 440, - "Pop1975": 540, - "Pop1980": 650, - "Pop1985": 740, - "Pop1990": 820, - "Pop1995": 940, - "Pop2000": 1080, - "Pop2005": 1240, - "Pop2010": 1300, - "Pop2015": 1390, - "Pop2020": 1550, - "Pop2025": 1730, - "Pop2050": 1933, - "Location": [ - 22.8, - 86.18 - ] - }, - { - "City": "Jodhpur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 180, - "Pop1955": 200, - "Pop1960": 220, - "Pop1965": 260, - "Pop1970": 310, - "Pop1975": 390, - "Pop1980": 490, - "Pop1985": 570, - "Pop1990": 650, - "Pop1995": 740, - "Pop2000": 840, - "Pop2005": 950, - "Pop2010": 1000, - "Pop2015": 1060, - "Pop2020": 1180, - "Pop2025": 1330, - "Pop2050": 1486, - "Location": [ - 26.28, - 73.02 - ] - }, - { - "City": "Kanpur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 690, - "Pop1955": 810, - "Pop1960": 950, - "Pop1965": 1090, - "Pop1970": 1250, - "Pop1975": 1420, - "Pop1980": 1610, - "Pop1985": 1800, - "Pop1990": 2000, - "Pop1995": 2290, - "Pop2000": 2640, - "Pop2005": 3020, - "Pop2010": 3160, - "Pop2015": 3370, - "Pop2020": 3730, - "Pop2025": 4140, - "Pop2050": 4601, - "Location": [ - 26.45, - 80.31 - ] - }, - { - "City": "Kochi", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 160, - "Pop1955": 210, - "Pop1960": 270, - "Pop1965": 340, - "Pop1970": 420, - "Pop1975": 530, - "Pop1980": 670, - "Pop1985": 860, - "Pop1990": 1100, - "Pop1995": 1230, - "Pop2000": 1340, - "Pop2005": 1460, - "Pop2010": 1520, - "Pop2015": 1610, - "Pop2020": 1790, - "Pop2025": 2000, - "Pop2050": 2232, - "Location": [ - 9.97, - 76.27 - ] - }, - { - "City": "Kolkata", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 4510, - "Pop1955": 5060, - "Pop1960": 5650, - "Pop1965": 6260, - "Pop1970": 6930, - "Pop1975": 7890, - "Pop1980": 9030, - "Pop1985": 9950, - "Pop1990": 10890, - "Pop1995": 11920, - "Pop2000": 13060, - "Pop2005": 14280, - "Pop2010": 14790, - "Pop2015": 15580, - "Pop2020": 17040, - "Pop2025": 18710, - "Pop2050": 20560, - "Location": [ - 22.54, - 88.33 - ] - }, - { - "City": "Kota", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 60, - "Pop1955": 80, - "Pop1960": 120, - "Pop1965": 150, - "Pop1970": 200, - "Pop1975": 270, - "Pop1980": 350, - "Pop1985": 430, - "Pop1990": 520, - "Pop1995": 600, - "Pop2000": 690, - "Pop2005": 790, - "Pop2010": 830, - "Pop2015": 880, - "Pop2020": 990, - "Pop2025": 1110, - "Pop2050": 1243, - "Location": [ - 25.18, - 75.83 - ] - }, - { - "City": "Kozhikode", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 160, - "Pop1955": 180, - "Pop1960": 220, - "Pop1965": 260, - "Pop1970": 320, - "Pop1975": 410, - "Pop1980": 530, - "Pop1985": 640, - "Pop1990": 780, - "Pop1995": 840, - "Pop2000": 880, - "Pop2005": 920, - "Pop2010": 950, - "Pop2015": 1010, - "Pop2020": 1120, - "Pop2025": 1260, - "Pop2050": 1409, - "Location": [ - 26.28, - 75.77 - ] - }, - { - "City": "Lucknow", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 490, - "Pop1955": 560, - "Pop1960": 640, - "Pop1965": 720, - "Pop1970": 800, - "Pop1975": 890, - "Pop1980": 990, - "Pop1985": 1250, - "Pop1990": 1610, - "Pop1995": 1910, - "Pop2000": 2220, - "Pop2005": 2570, - "Pop2010": 2700, - "Pop2015": 2880, - "Pop2020": 3190, - "Pop2025": 3550, - "Pop2050": 3944, - "Location": [ - 26.84, - 80.91 - ] - }, - { - "City": "Ludhiana", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 150, - "Pop1955": 190, - "Pop1960": 240, - "Pop1965": 300, - "Pop1970": 390, - "Pop1975": 480, - "Pop1980": 590, - "Pop1985": 770, - "Pop1990": 1010, - "Pop1995": 1180, - "Pop2000": 1370, - "Pop2005": 1570, - "Pop2010": 1650, - "Pop2015": 1760, - "Pop2020": 1960, - "Pop2025": 2190, - "Pop2050": 2440, - "Location": [ - 30.91, - 75.85 - ] - }, - { - "City": "Madurai", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 360, - "Pop1955": 420, - "Pop1960": 480, - "Pop1965": 580, - "Pop1970": 690, - "Pop1975": 790, - "Pop1980": 890, - "Pop1985": 980, - "Pop1990": 1070, - "Pop1995": 1130, - "Pop2000": 1190, - "Pop2005": 1260, - "Pop2010": 1290, - "Pop2015": 1370, - "Pop2020": 1520, - "Pop2025": 1700, - "Pop2050": 1897, - "Location": [ - 9.91, - 78.12 - ] - }, - { - "City": "Meerut", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 230, - "Pop1955": 250, - "Pop1960": 280, - "Pop1965": 320, - "Pop1970": 360, - "Pop1975": 430, - "Pop1980": 520, - "Pop1985": 660, - "Pop1990": 820, - "Pop1995": 980, - "Pop2000": 1140, - "Pop2005": 1330, - "Pop2010": 1400, - "Pop2015": 1500, - "Pop2020": 1670, - "Pop2025": 1860, - "Pop2050": 2080, - "Location": [ - 28.99, - 77.7 - ] - }, - { - "City": "Moradabad", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 160, - "Pop1955": 170, - "Pop1960": 190, - "Pop1965": 220, - "Pop1970": 270, - "Pop1975": 300, - "Pop1980": 340, - "Pop1985": 380, - "Pop1990": 440, - "Pop1995": 520, - "Pop2000": 630, - "Pop2005": 740, - "Pop2010": 790, - "Pop2015": 850, - "Pop2020": 950, - "Pop2025": 1060, - "Pop2050": 1192, - "Location": [ - 28.83, - 78.78 - ] - }, - { - "City": "Mumbai", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 2860, - "Pop1955": 3430, - "Pop1960": 4060, - "Pop1965": 4850, - "Pop1970": 5810, - "Pop1975": 7080, - "Pop1980": 8660, - "Pop1985": 10340, - "Pop1990": 12310, - "Pop1995": 14110, - "Pop2000": 16090, - "Pop2005": 18200, - "Pop2010": 18980, - "Pop2015": 20070, - "Pop2020": 21950, - "Pop2025": 24050, - "Pop2050": 26385, - "Location": [ - 19.07, - 72.82 - ] - }, - { - "City": "Mysore", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 240, - "Pop1955": 250, - "Pop1960": 250, - "Pop1965": 290, - "Pop1970": 350, - "Pop1975": 400, - "Pop1980": 470, - "Pop1985": 550, - "Pop1990": 640, - "Pop1995": 710, - "Pop2000": 780, - "Pop2005": 850, - "Pop2010": 890, - "Pop2015": 940, - "Pop2020": 1050, - "Pop2025": 1180, - "Pop2050": 1322, - "Location": [ - 12.3, - 76.65 - ] - }, - { - "City": "Nagpur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 470, - "Pop1955": 560, - "Pop1960": 670, - "Pop1965": 780, - "Pop1970": 910, - "Pop1975": 1080, - "Pop1980": 1270, - "Pop1985": 1450, - "Pop1990": 1640, - "Pop1995": 1850, - "Pop2000": 2090, - "Pop2005": 2350, - "Pop2010": 2450, - "Pop2015": 2610, - "Pop2020": 2900, - "Pop2025": 3220, - "Pop2050": 3583, - "Location": [ - 21.15, - 79.08 - ] - }, - { - "City": "Nashik", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 150, - "Pop1955": 180, - "Pop1960": 210, - "Pop1965": 240, - "Pop1970": 270, - "Pop1975": 330, - "Pop1980": 420, - "Pop1985": 540, - "Pop1990": 700, - "Pop1995": 890, - "Pop2000": 1120, - "Pop2005": 1380, - "Pop2010": 1470, - "Pop2015": 1590, - "Pop2020": 1780, - "Pop2025": 1980, - "Pop2050": 2213, - "Location": [ - 20.02, - 73.5 - ] - }, - { - "City": "Patna", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 280, - "Pop1955": 320, - "Pop1960": 360, - "Pop1965": 410, - "Pop1970": 480, - "Pop1975": 640, - "Pop1980": 880, - "Pop1985": 990, - "Pop1990": 1090, - "Pop1995": 1330, - "Pop2000": 1660, - "Pop2005": 2030, - "Pop2010": 2160, - "Pop2015": 2320, - "Pop2020": 2590, - "Pop2025": 2880, - "Pop2050": 3207, - "Location": [ - 25.61, - 85.13 - ] - }, - { - "City": "Pune", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 580, - "Pop1955": 680, - "Pop1960": 780, - "Pop1965": 920, - "Pop1970": 1100, - "Pop1975": 1340, - "Pop1980": 1640, - "Pop1985": 2000, - "Pop1990": 2430, - "Pop1995": 2980, - "Pop2000": 3660, - "Pop2005": 4410, - "Pop2010": 4670, - "Pop2015": 5010, - "Pop2020": 5540, - "Pop2025": 6140, - "Pop2050": 6797, - "Location": [ - 18.53, - 73.85 - ] - }, - { - "City": "Raipur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 90, - "Pop1955": 110, - "Pop1960": 140, - "Pop1965": 160, - "Pop1970": 200, - "Pop1975": 260, - "Pop1980": 330, - "Pop1985": 390, - "Pop1990": 450, - "Pop1995": 550, - "Pop2000": 680, - "Pop2005": 820, - "Pop2010": 880, - "Pop2015": 940, - "Pop2020": 1060, - "Pop2025": 1180, - "Pop2050": 1327, - "Location": [ - 21.23, - 81.63 - ] - }, - { - "City": "Rajkot", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 130, - "Pop1955": 160, - "Pop1960": 190, - "Pop1965": 230, - "Pop1970": 290, - "Pop1975": 360, - "Pop1980": 430, - "Pop1985": 530, - "Pop1990": 640, - "Pop1995": 790, - "Pop2000": 970, - "Pop2005": 1190, - "Pop2010": 1260, - "Pop2015": 1360, - "Pop2020": 1520, - "Pop2025": 1700, - "Pop2050": 1896, - "Location": [ - 22.3, - 70.78 - ] - }, - { - "City": "Ranchi", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 100, - "Pop1955": 120, - "Pop1960": 140, - "Pop1965": 180, - "Pop1970": 240, - "Pop1975": 340, - "Pop1980": 480, - "Pop1985": 550, - "Pop1990": 610, - "Pop1995": 710, - "Pop2000": 840, - "Pop2005": 990, - "Pop2010": 1040, - "Pop2015": 1120, - "Pop2020": 1250, - "Pop2025": 1400, - "Pop2050": 1567, - "Location": [ - 23.35, - 85.33 - ] - }, - { - "City": "Salem", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 200, - "Pop1955": 230, - "Pop1960": 270, - "Pop1965": 330, - "Pop1970": 400, - "Pop1975": 460, - "Pop1980": 510, - "Pop1985": 540, - "Pop1990": 570, - "Pop1995": 650, - "Pop2000": 740, - "Pop2005": 830, - "Pop2010": 870, - "Pop2015": 930, - "Pop2020": 1040, - "Pop2025": 1170, - "Pop2050": 1309, - "Location": [ - 11.65, - 78.16 - ] - }, - { - "City": "Solapur", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 270, - "Pop1955": 300, - "Pop1960": 330, - "Pop1965": 360, - "Pop1970": 390, - "Pop1975": 440, - "Pop1980": 510, - "Pop1985": 560, - "Pop1990": 610, - "Pop1995": 720, - "Pop2000": 850, - "Pop2005": 1000, - "Pop2010": 1060, - "Pop2015": 1140, - "Pop2020": 1270, - "Pop2025": 1420, - "Pop2050": 1587, - "Location": [ - 17.68, - 75.92 - ] - }, - { - "City": "Srinagar", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 250, - "Pop1955": 270, - "Pop1960": 290, - "Pop1965": 340, - "Pop1970": 410, - "Pop1975": 490, - "Pop1980": 590, - "Pop1985": 660, - "Pop1990": 730, - "Pop1995": 830, - "Pop2000": 950, - "Pop2005": 1090, - "Pop2010": 1140, - "Pop2015": 1220, - "Pop2020": 1360, - "Pop2025": 1520, - "Pop2050": 1699, - "Location": [ - 34.08, - 74.8 - ] - }, - { - "City": "Surat", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 230, - "Pop1955": 270, - "Pop1960": 310, - "Pop1965": 380, - "Pop1970": 480, - "Pop1975": 640, - "Pop1980": 880, - "Pop1985": 1140, - "Pop1990": 1470, - "Pop1995": 1980, - "Pop2000": 2700, - "Pop2005": 3560, - "Pop2010": 3840, - "Pop2015": 4170, - "Pop2020": 4640, - "Pop2025": 5140, - "Pop2050": 5703, - "Location": [ - 21.16, - 72.83 - ] - }, - { - "City": "Thiruvananthapuram", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 180, - "Pop1955": 210, - "Pop1960": 240, - "Pop1965": 300, - "Pop1970": 390, - "Pop1975": 450, - "Pop1980": 510, - "Pop1985": 640, - "Pop1990": 800, - "Pop1995": 850, - "Pop2000": 880, - "Pop2005": 930, - "Pop2010": 950, - "Pop2015": 1010, - "Pop2020": 1120, - "Pop2025": 1260, - "Pop2050": 1408, - "Location": [ - 8.48, - 76.95 - ] - }, - { - "City": "Tiruchirappalli", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 290, - "Pop1955": 310, - "Pop1960": 340, - "Pop1965": 390, - "Pop1970": 450, - "Pop1975": 520, - "Pop1980": 600, - "Pop1985": 650, - "Pop1990": 700, - "Pop1995": 770, - "Pop2000": 840, - "Pop2005": 920, - "Pop2010": 950, - "Pop2015": 1010, - "Pop2020": 1130, - "Pop2025": 1260, - "Pop2050": 1414, - "Location": [ - 10.81, - 78.69 - ] - }, - { - "City": "Vadodara", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 210, - "Pop1955": 250, - "Pop1960": 300, - "Pop1965": 370, - "Pop1970": 450, - "Pop1975": 570, - "Pop1980": 720, - "Pop1985": 890, - "Pop1990": 1100, - "Pop1995": 1270, - "Pop2000": 1460, - "Pop2005": 1680, - "Pop2010": 1760, - "Pop2015": 1880, - "Pop2020": 2080, - "Pop2025": 2320, - "Pop2050": 2592, - "Location": [ - 22.3, - 73.2 - ] - }, - { - "City": "Varanasi", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 350, - "Pop1955": 410, - "Pop1960": 480, - "Pop1965": 540, - "Pop1970": 600, - "Pop1975": 680, - "Pop1980": 780, - "Pop1985": 890, - "Pop1990": 1010, - "Pop1995": 1110, - "Pop2000": 1200, - "Pop2005": 1300, - "Pop2010": 1350, - "Pop2015": 1430, - "Pop2020": 1600, - "Pop2025": 1780, - "Pop2050": 1991, - "Location": [ - 25.28, - 82.95 - ] - }, - { - "City": "Vijayawada", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 160, - "Pop1955": 190, - "Pop1960": 230, - "Pop1965": 280, - "Pop1970": 340, - "Pop1975": 420, - "Pop1980": 530, - "Pop1985": 660, - "Pop1990": 820, - "Pop1995": 910, - "Pop2000": 1000, - "Pop2005": 1090, - "Pop2010": 1140, - "Pop2015": 1210, - "Pop2020": 1350, - "Pop2025": 1500, - "Pop2050": 1684, - "Location": [ - 16.51, - 80.61 - ] - }, - { - "City": "Visakhapatnam", - "Country": "India", - "Country_ISO3": "IND", - "Pop1950": 100, - "Pop1955": 140, - "Pop1960": 200, - "Pop1965": 270, - "Pop1970": 350, - "Pop1975": 450, - "Pop1980": 580, - "Pop1985": 770, - "Pop1990": 1020, - "Pop1995": 1170, - "Pop2000": 1310, - "Pop2005": 1460, - "Pop2010": 1530, - "Pop2015": 1630, - "Pop2020": 1810, - "Pop2025": 2020, - "Pop2050": 2256, - "Location": [ - 17.74, - 83.33 - ] - }, - { - "City": "Adelaide", - "Country": "Australia", - "Country_ISO3": "AUS", - "Pop1950": 430, - "Pop1955": 500, - "Pop1960": 570, - "Pop1965": 700, - "Pop1970": 790, - "Pop1975": 880, - "Pop1980": 940, - "Pop1985": 990, - "Pop1990": 1050, - "Pop1995": 1070, - "Pop2000": 1100, - "Pop2005": 1130, - "Pop2010": 1140, - "Pop2015": 1170, - "Pop2020": 1210, - "Pop2025": 1260, - "Pop2050": 1300, - "Location": [ - -34.81, - 138.52 - ] - }, - { - "City": "Brisbane", - "Country": "Australia", - "Country_ISO3": "AUS", - "Pop1950": 440, - "Pop1955": 520, - "Pop1960": 600, - "Pop1965": 700, - "Pop1970": 800, - "Pop1975": 930, - "Pop1980": 1070, - "Pop1985": 1190, - "Pop1990": 1330, - "Pop1995": 1470, - "Pop2000": 1600, - "Pop2005": 1780, - "Pop2010": 1860, - "Pop2015": 1970, - "Pop2020": 2090, - "Pop2025": 2170, - "Pop2050": 2233, - "Location": [ - -27.45, - 153.02 - ] - }, - { - "City": "Melbourne", - "Country": "Australia", - "Country_ISO3": "AUS", - "Pop1950": 1330, - "Pop1955": 1570, - "Pop1960": 1850, - "Pop1965": 2070, - "Pop1970": 2330, - "Pop1975": 2560, - "Pop1980": 2760, - "Pop1985": 2940, - "Pop1990": 3120, - "Pop1995": 3260, - "Pop2000": 3430, - "Pop2005": 3640, - "Pop2010": 3730, - "Pop2015": 3850, - "Pop2020": 4010, - "Pop2025": 4140, - "Pop2050": 4238, - "Location": [ - -37.85, - 145.07 - ] - }, - { - "City": "Perth", - "Country": "Australia", - "Country_ISO3": "AUS", - "Pop1950": 310, - "Pop1955": 360, - "Pop1960": 410, - "Pop1965": 480, - "Pop1970": 610, - "Pop1975": 770, - "Pop1980": 900, - "Pop1985": 1020, - "Pop1990": 1160, - "Pop1995": 1270, - "Pop2000": 1370, - "Pop2005": 1480, - "Pop2010": 1530, - "Pop2015": 1600, - "Pop2020": 1680, - "Pop2025": 1750, - "Pop2050": 1800, - "Location": [ - -31.95, - 115.85 - ] - }, - { - "City": "Sydney", - "Country": "Australia", - "Country_ISO3": "AUS", - "Pop1950": 1690, - "Pop1955": 1910, - "Pop1960": 2140, - "Pop1965": 2390, - "Pop1970": 2670, - "Pop1975": 2960, - "Pop1980": 3230, - "Pop1985": 3430, - "Pop1990": 3630, - "Pop1995": 3840, - "Pop2000": 4080, - "Pop2005": 4260, - "Pop2010": 4330, - "Pop2015": 4430, - "Pop2020": 4580, - "Pop2025": 4720, - "Pop2050": 4826, - "Location": [ - -33.88, - 151.02 - ] - }, - { - "City": "Bandar Lampung", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 30, - "Pop1955": 40, - "Pop1960": 60, - "Pop1965": 100, - "Pop1970": 150, - "Pop1975": 230, - "Pop1980": 350, - "Pop1985": 400, - "Pop1990": 450, - "Pop1995": 580, - "Pop2000": 740, - "Pop2005": 820, - "Pop2010": 860, - "Pop2015": 940, - "Pop2020": 1060, - "Pop2025": 1170, - "Pop2050": 1260, - "Location": [ - -5.45, - 105.26 - ] - }, - { - "City": "Bandung", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 510, - "Pop1955": 680, - "Pop1960": 900, - "Pop1965": 1050, - "Pop1970": 1170, - "Pop1975": 1300, - "Pop1980": 1450, - "Pop1985": 1720, - "Pop1990": 2040, - "Pop1995": 2100, - "Pop2000": 2140, - "Pop2005": 2300, - "Pop2010": 2390, - "Pop2015": 2570, - "Pop2020": 2890, - "Pop2025": 3160, - "Pop2050": 3370, - "Location": [ - -6.91, - 107.6 - ] - }, - { - "City": "Bogor", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 110, - "Pop1955": 130, - "Pop1960": 150, - "Pop1965": 200, - "Pop1970": 300, - "Pop1975": 410, - "Pop1980": 540, - "Pop1985": 570, - "Pop1990": 600, - "Pop1995": 670, - "Pop2000": 750, - "Pop2005": 860, - "Pop2010": 920, - "Pop2015": 1000, - "Pop2020": 1140, - "Pop2025": 1260, - "Pop2050": 1351, - "Location": [ - -6.6, - 106.8 - ] - }, - { - "City": "Jakarta", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 1450, - "Pop1955": 1970, - "Pop1960": 2680, - "Pop1965": 3300, - "Pop1970": 3920, - "Pop1975": 4810, - "Pop1980": 5980, - "Pop1985": 7010, - "Pop1990": 8180, - "Pop1995": 8320, - "Pop2000": 8390, - "Pop2005": 8840, - "Pop2010": 9120, - "Pop2015": 9700, - "Pop2020": 10790, - "Pop2025": 11690, - "Pop2050": 12363, - "Location": [ - -6.16, - 106.8 - ] - }, - { - "City": "Malang", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 210, - "Pop1955": 260, - "Pop1960": 320, - "Pop1965": 370, - "Pop1970": 410, - "Pop1975": 460, - "Pop1980": 510, - "Pop1985": 590, - "Pop1990": 690, - "Pop1995": 720, - "Pop2000": 760, - "Pop2005": 780, - "Pop2010": 800, - "Pop2015": 860, - "Pop2020": 970, - "Pop2025": 1060, - "Pop2050": 1146, - "Location": [ - -7.98, - 112.62 - ] - }, - { - "City": "Medan", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 280, - "Pop1955": 360, - "Pop1960": 450, - "Pop1965": 530, - "Pop1970": 610, - "Pop1975": 880, - "Pop1980": 1340, - "Pop1985": 1530, - "Pop1990": 1720, - "Pop1995": 1820, - "Pop2000": 1910, - "Pop2005": 2040, - "Pop2010": 2120, - "Pop2015": 2260, - "Pop2020": 2540, - "Pop2025": 2790, - "Pop2050": 2977, - "Location": [ - 3.58, - 98.67 - ] - }, - { - "City": "Padang", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 100, - "Pop1955": 120, - "Pop1960": 140, - "Pop1965": 160, - "Pop1970": 190, - "Pop1975": 280, - "Pop1980": 460, - "Pop1985": 550, - "Pop1990": 630, - "Pop1995": 670, - "Pop2000": 720, - "Pop2005": 810, - "Pop2010": 860, - "Pop2015": 930, - "Pop2020": 1060, - "Pop2025": 1170, - "Pop2050": 1254, - "Location": [ - -0.95, - 100.35 - ] - }, - { - "City": "Palembang", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 280, - "Pop1955": 350, - "Pop1960": 450, - "Pop1965": 510, - "Pop1970": 570, - "Pop1975": 660, - "Pop1980": 780, - "Pop1985": 940, - "Pop1990": 1130, - "Pop1995": 1290, - "Pop2000": 1460, - "Pop2005": 1660, - "Pop2010": 1750, - "Pop2015": 1900, - "Pop2020": 2150, - "Pop2025": 2360, - "Pop2050": 2526, - "Location": [ - -2.99, - 104.75 - ] - }, - { - "City": "Pekan Baru", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 40, - "Pop1955": 50, - "Pop1960": 70, - "Pop1965": 90, - "Pop1970": 120, - "Pop1975": 150, - "Pop1980": 180, - "Pop1985": 270, - "Pop1990": 390, - "Pop1995": 480, - "Pop2000": 590, - "Pop2005": 740, - "Pop2010": 800, - "Pop2015": 890, - "Pop2020": 1020, - "Pop2025": 1130, - "Pop2050": 1213, - "Location": [ - 0.53, - 101.45 - ] - }, - { - "City": "Semarang", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 370, - "Pop1955": 420, - "Pop1960": 480, - "Pop1965": 550, - "Pop1970": 630, - "Pop1975": 780, - "Pop1980": 1010, - "Pop1985": 1130, - "Pop1990": 1240, - "Pop1995": 1330, - "Pop2000": 1430, - "Pop2005": 1380, - "Pop2010": 1400, - "Pop2015": 1460, - "Pop2020": 1630, - "Pop2025": 1790, - "Pop2050": 1921, - "Location": [ - -6.97, - 110.42 - ] - }, - { - "City": "Surabaya", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 680, - "Pop1955": 810, - "Pop1960": 960, - "Pop1965": 1180, - "Pop1970": 1470, - "Pop1975": 1740, - "Pop1980": 2010, - "Pop1985": 2230, - "Pop1990": 2470, - "Pop1995": 2540, - "Pop2000": 2610, - "Pop2005": 2750, - "Pop2010": 2840, - "Pop2015": 3040, - "Pop2020": 3400, - "Pop2025": 3720, - "Pop2050": 3962, - "Location": [ - -7.39, - 112.68 - ] - }, - { - "City": "Ujung Pandang", - "Country": "Indonesia", - "Country_ISO3": "IDN", - "Pop1950": 220, - "Pop1955": 280, - "Pop1960": 360, - "Pop1965": 400, - "Pop1970": 420, - "Pop1975": 500, - "Pop1980": 630, - "Pop1985": 720, - "Pop1990": 820, - "Pop1995": 930, - "Pop2000": 1050, - "Pop2005": 1190, - "Pop2010": 1260, - "Pop2015": 1370, - "Pop2020": 1560, - "Pop2025": 1710, - "Pop2050": 1837, - "Location": [ - -5.13, - 119.41 - ] - }, - { - "City": "Ahvaz", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 80, - "Pop1955": 110, - "Pop1960": 150, - "Pop1965": 190, - "Pop1970": 250, - "Pop1975": 310, - "Pop1980": 410, - "Pop1985": 540, - "Pop1990": 680, - "Pop1995": 780, - "Pop2000": 870, - "Pop2005": 960, - "Pop2010": 1000, - "Pop2015": 1060, - "Pop2020": 1160, - "Pop2025": 1250, - "Pop2050": 1326, - "Location": [ - 31.31, - 48.68 - ] - }, - { - "City": "Esfahan", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 180, - "Pop1955": 240, - "Pop1960": 310, - "Pop1965": 400, - "Pop1970": 540, - "Pop1975": 770, - "Pop1980": 900, - "Pop1985": 980, - "Pop1990": 1090, - "Pop1995": 1230, - "Pop2000": 1380, - "Pop2005": 1550, - "Pop2010": 1630, - "Pop2015": 1740, - "Pop2020": 1920, - "Pop2025": 2070, - "Pop2050": 2185, - "Location": [ - 32.65, - 51.67 - ] - }, - { - "City": "Karaj", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 10, - "Pop1955": 10, - "Pop1960": 20, - "Pop1965": 40, - "Pop1970": 70, - "Pop1975": 120, - "Pop1980": 220, - "Pop1985": 390, - "Pop1990": 690, - "Pop1995": 900, - "Pop2000": 1090, - "Pop2005": 1320, - "Pop2010": 1420, - "Pop2015": 1580, - "Pop2020": 1800, - "Pop2025": 1950, - "Pop2050": 2061, - "Location": [ - 35.81, - 50.96 - ] - }, - { - "City": "Kermanshah", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 100, - "Pop1955": 120, - "Pop1960": 140, - "Pop1965": 180, - "Pop1970": 220, - "Pop1975": 270, - "Pop1980": 370, - "Pop1985": 520, - "Pop1990": 610, - "Pop1995": 680, - "Pop2000": 730, - "Pop2005": 780, - "Pop2010": 800, - "Pop2015": 840, - "Pop2020": 910, - "Pop2025": 980, - "Pop2050": 1041, - "Location": [ - 34.3, - 47.05 - ] - }, - { - "City": "Mashhad", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 170, - "Pop1955": 220, - "Pop1960": 290, - "Pop1965": 380, - "Pop1970": 510, - "Pop1975": 680, - "Pop1980": 950, - "Pop1985": 1340, - "Pop1990": 1680, - "Pop1995": 1850, - "Pop2000": 2070, - "Pop2005": 2350, - "Pop2010": 2470, - "Pop2015": 2650, - "Pop2020": 2930, - "Pop2025": 3150, - "Pop2050": 3315, - "Location": [ - 36.28, - 59.59 - ] - }, - { - "City": "Qom", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 80, - "Pop1955": 90, - "Pop1960": 110, - "Pop1965": 130, - "Pop1970": 170, - "Pop1975": 230, - "Pop1980": 330, - "Pop1985": 490, - "Pop1990": 620, - "Pop1995": 740, - "Pop2000": 840, - "Pop2005": 930, - "Pop2010": 970, - "Pop2015": 1040, - "Pop2020": 1140, - "Pop2025": 1230, - "Pop2050": 1302, - "Location": [ - 34.65, - 50.88 - ] - }, - { - "City": "Shiraz", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 130, - "Pop1955": 160, - "Pop1960": 200, - "Pop1965": 250, - "Pop1970": 320, - "Pop1975": 420, - "Pop1980": 580, - "Pop1985": 820, - "Pop1990": 950, - "Pop1995": 1030, - "Pop2000": 1120, - "Pop2005": 1200, - "Pop2010": 1240, - "Pop2015": 1300, - "Pop2020": 1410, - "Pop2025": 1520, - "Pop2050": 1608, - "Location": [ - 29.6, - 52.53 - ] - }, - { - "City": "Tabriz", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 240, - "Pop1955": 280, - "Pop1960": 330, - "Pop1965": 390, - "Pop1970": 500, - "Pop1975": 660, - "Pop1980": 800, - "Pop1985": 940, - "Pop1990": 1060, - "Pop1995": 1160, - "Pop2000": 1260, - "Pop2005": 1370, - "Pop2010": 1410, - "Pop2015": 1480, - "Pop2020": 1610, - "Pop2025": 1740, - "Pop2050": 1834, - "Location": [ - 38.08, - 46.28 - ] - }, - { - "City": "Tehran", - "Country": "Iran (Islamic Republic of)", - "Country_ISO3": "IRN", - "Pop1950": 1040, - "Pop1955": 1400, - "Pop1960": 1870, - "Pop1965": 2510, - "Pop1970": 3290, - "Pop1975": 4270, - "Pop1980": 5080, - "Pop1985": 5840, - "Pop1990": 6360, - "Pop1995": 6690, - "Pop2000": 7130, - "Pop2005": 7650, - "Pop2010": 7870, - "Pop2015": 8220, - "Pop2020": 8830, - "Pop2025": 9400, - "Pop2050": 9814, - "Location": [ - 35.77, - 51.44 - ] - }, - { - "City": "Al-Basrah", - "Country": "Iraq", - "Country_ISO3": "IRQ", - "Pop1950": 120, - "Pop1955": 150, - "Pop1960": 200, - "Pop1965": 300, - "Pop1970": 330, - "Pop1975": 350, - "Pop1980": 370, - "Pop1985": 400, - "Pop1990": 470, - "Pop1995": 630, - "Pop2000": 760, - "Pop2005": 840, - "Pop2010": 870, - "Pop2015": 920, - "Pop2020": 1020, - "Pop2025": 1140, - "Pop2050": 1270, - "Location": [ - 30.5, - 47.76 - ] - }, - { - "City": "Al-Mawsil", - "Country": "Iraq", - "Country_ISO3": "IRQ", - "Pop1950": 140, - "Pop1955": 170, - "Pop1960": 200, - "Pop1965": 260, - "Pop1970": 320, - "Pop1975": 400, - "Pop1980": 490, - "Pop1985": 600, - "Pop1990": 740, - "Pop1995": 890, - "Pop2000": 1060, - "Pop2005": 1240, - "Pop2010": 1320, - "Pop2015": 1450, - "Pop2020": 1680, - "Pop2025": 1890, - "Pop2050": 2097, - "Location": [ - 36.33, - 43.13 - ] - }, - { - "City": "Baghdad", - "Country": "Iraq", - "Country_ISO3": "IRQ", - "Pop1950": 580, - "Pop1955": 720, - "Pop1960": 1020, - "Pop1965": 1610, - "Pop1970": 2070, - "Pop1975": 2620, - "Pop1980": 3140, - "Pop1985": 3610, - "Pop1990": 4090, - "Pop1995": 4600, - "Pop2000": 5200, - "Pop2005": 5330, - "Pop2010": 5050, - "Pop2015": 5890, - "Pop2020": 6620, - "Pop2025": 7340, - "Pop2050": 8060, - "Location": [ - 33.33, - 44.39 - ] - }, - { - "City": "Irbil", - "Country": "Iraq", - "Country_ISO3": "IRQ", - "Pop1950": 30, - "Pop1955": 40, - "Pop1960": 50, - "Pop1965": 90, - "Pop1970": 130, - "Pop1975": 190, - "Pop1980": 280, - "Pop1985": 410, - "Pop1990": 540, - "Pop1995": 640, - "Pop2000": 760, - "Pop2005": 870, - "Pop2010": 930, - "Pop2015": 1010, - "Pop2020": 1160, - "Pop2025": 1300, - "Pop2050": 1450, - "Location": [ - 36.16, - 44.01 - ] - }, - { - "City": "Dublin", - "Country": "Ireland", - "Country_ISO3": "IRL", - "Pop1950": 630, - "Pop1955": 650, - "Pop1960": 660, - "Pop1965": 720, - "Pop1970": 770, - "Pop1975": 830, - "Pop1980": 900, - "Pop1985": 920, - "Pop1990": 920, - "Pop1995": 950, - "Pop2000": 990, - "Pop2005": 1040, - "Pop2010": 1060, - "Pop2015": 1100, - "Pop2020": 1180, - "Pop2025": 1260, - "Pop2050": 1332, - "Location": [ - 53.34, - -6.25 - ] - }, - { - "City": "Hefa", - "Country": "Israel", - "Country_ISO3": "ISR", - "Pop1950": 200, - "Pop1955": 230, - "Pop1960": 260, - "Pop1965": 290, - "Pop1970": 320, - "Pop1975": 350, - "Pop1980": 370, - "Pop1985": 440, - "Pop1990": 580, - "Pop1995": 780, - "Pop2000": 890, - "Pop2005": 990, - "Pop2010": 1010, - "Pop2015": 1040, - "Pop2020": 1100, - "Pop2025": 1160, - "Pop2050": 1210, - "Location": [ - 32.76, - 35 - ] - }, - { - "City": "Tel Aviv-Yafo", - "Country": "Israel", - "Country_ISO3": "ISR", - "Pop1950": 420, - "Pop1955": 560, - "Pop1960": 740, - "Pop1965": 880, - "Pop1970": 1030, - "Pop1975": 1210, - "Pop1980": 1420, - "Pop1985": 1680, - "Pop1990": 2030, - "Pop1995": 2440, - "Pop2000": 2750, - "Pop2005": 3010, - "Pop2010": 3110, - "Pop2015": 3260, - "Pop2020": 3450, - "Pop2025": 3600, - "Pop2050": 3726, - "Location": [ - 32.04, - 34.76 - ] - }, - { - "City": "Milano", - "Country": "Italy", - "Country_ISO3": "ITA", - "Pop1950": 1880, - "Pop1955": 2100, - "Pop1960": 2400, - "Pop1965": 2700, - "Pop1970": 3020, - "Pop1975": 3130, - "Pop1980": 3170, - "Pop1985": 3130, - "Pop1990": 3060, - "Pop1995": 3020, - "Pop2000": 2980, - "Pop2005": 2950, - "Pop2010": 2940, - "Pop2015": 2940, - "Pop2020": 2940, - "Pop2025": 2940, - "Pop2050": 2938, - "Location": [ - 45.47, - 9.18 - ] - }, - { - "City": "Napoli", - "Country": "Italy", - "Country_ISO3": "ITA", - "Pop1950": 1500, - "Pop1955": 1620, - "Pop1960": 1760, - "Pop1965": 1880, - "Pop1970": 2000, - "Pop1975": 2100, - "Pop1980": 2190, - "Pop1985": 2210, - "Pop1990": 2210, - "Pop1995": 2220, - "Pop2000": 2230, - "Pop2005": 2250, - "Pop2010": 2250, - "Pop2015": 2250, - "Pop2020": 2250, - "Pop2025": 2250, - "Pop2050": 2254, - "Location": [ - 40.83, - 14.25 - ] - }, - { - "City": "Palermo", - "Country": "Italy", - "Country_ISO3": "ITA", - "Pop1950": 590, - "Pop1955": 640, - "Pop1960": 690, - "Pop1965": 720, - "Pop1970": 750, - "Pop1975": 780, - "Pop1980": 820, - "Pop1985": 830, - "Pop1990": 840, - "Pop1995": 850, - "Pop2000": 860, - "Pop2005": 860, - "Pop2010": 860, - "Pop2015": 860, - "Pop2020": 870, - "Pop2025": 870, - "Pop2050": 871, - "Location": [ - 38.12, - 13.35 - ] - }, - { - "City": "Rome", - "Country": "Italy", - "Country_ISO3": "ITA", - "Pop1950": 1880, - "Pop1955": 2140, - "Pop1960": 2460, - "Pop1965": 2780, - "Pop1970": 3140, - "Pop1975": 3300, - "Pop1980": 3390, - "Pop1985": 3430, - "Pop1990": 3450, - "Pop1995": 3420, - "Pop2000": 3380, - "Pop2005": 3350, - "Pop2010": 3340, - "Pop2015": 3330, - "Pop2020": 3330, - "Pop2025": 3330, - "Pop2050": 3330, - "Location": [ - 41.87, - 12.51 - ] - }, - { - "City": "Torino", - "Country": "Italy", - "Country_ISO3": "ITA", - "Pop1950": 1010, - "Pop1955": 1150, - "Pop1960": 1350, - "Pop1965": 1550, - "Pop1970": 1760, - "Pop1975": 1840, - "Pop1980": 1860, - "Pop1985": 1830, - "Pop1990": 1780, - "Pop1995": 1730, - "Pop2000": 1690, - "Pop2005": 1660, - "Pop2010": 1650, - "Pop2015": 1650, - "Pop2020": 1640, - "Pop2025": 1640, - "Pop2050": 1645, - "Location": [ - 45.07, - 7.66 - ] - }, - { - "City": "Abidjan", - "Country": "Côte d'Ivoire", - "Country_ISO3": "CIV", - "Pop1950": 60, - "Pop1955": 120, - "Pop1960": 190, - "Pop1965": 310, - "Pop1970": 550, - "Pop1975": 970, - "Pop1980": 1380, - "Pop1985": 1720, - "Pop1990": 2100, - "Pop1995": 2540, - "Pop2000": 3030, - "Pop2005": 3560, - "Pop2010": 3800, - "Pop2015": 4180, - "Pop2020": 4810, - "Pop2025": 5430, - "Pop2050": 6031, - "Location": [ - 5.32, - -4.02 - ] - }, - { - "City": "Fukuoka-Kitakyushu", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 950, - "Pop1955": 1150, - "Pop1960": 1340, - "Pop1965": 1490, - "Pop1970": 1650, - "Pop1975": 1850, - "Pop1980": 2030, - "Pop1985": 2220, - "Pop1990": 2490, - "Pop1995": 2620, - "Pop2000": 2720, - "Pop2005": 2770, - "Pop2010": 2790, - "Pop2015": 2820, - "Pop2020": 2830, - "Pop2025": 2830, - "Pop2050": 2834, - "Location": [ - 33.57, - 130.4 - ] - }, - { - "City": "Hiroshima", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 500, - "Pop1955": 650, - "Pop1960": 830, - "Pop1965": 1070, - "Pop1970": 1380, - "Pop1975": 1770, - "Pop1980": 1820, - "Pop1985": 1920, - "Pop1990": 1990, - "Pop1995": 2040, - "Pop2000": 2040, - "Pop2005": 2040, - "Pop2010": 2040, - "Pop2015": 2040, - "Pop2020": 2050, - "Pop2025": 2050, - "Pop2050": 2046, - "Location": [ - 34.37, - 132.44 - ] - }, - { - "City": "Kyoto", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 1000, - "Pop1955": 1090, - "Pop1960": 1160, - "Pop1965": 1230, - "Pop1970": 1300, - "Pop1975": 1620, - "Pop1980": 1700, - "Pop1985": 1710, - "Pop1990": 1760, - "Pop1995": 1800, - "Pop2000": 1810, - "Pop2005": 1800, - "Pop2010": 1800, - "Pop2015": 1800, - "Pop2020": 1800, - "Pop2025": 1800, - "Pop2050": 1804, - "Location": [ - 35, - 135.75 - ] - }, - { - "City": "Nagoya", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 990, - "Pop1955": 1230, - "Pop1960": 1560, - "Pop1965": 1760, - "Pop1970": 2000, - "Pop1975": 2290, - "Pop1980": 2590, - "Pop1985": 2710, - "Pop1990": 2950, - "Pop1995": 3060, - "Pop2000": 3120, - "Pop2005": 3200, - "Pop2010": 3230, - "Pop2015": 3270, - "Pop2020": 3290, - "Pop2025": 3300, - "Pop2050": 3295, - "Location": [ - 35.15, - 136.92 - ] - }, - { - "City": "Osaka-Kobe", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 4150, - "Pop1955": 5120, - "Pop1960": 6230, - "Pop1965": 7650, - "Pop1970": 9410, - "Pop1975": 9840, - "Pop1980": 9990, - "Pop1985": 10350, - "Pop1990": 11040, - "Pop1995": 11050, - "Pop2000": 11160, - "Pop2005": 11260, - "Pop2010": 11290, - "Pop2015": 11340, - "Pop2020": 11360, - "Pop2025": 11370, - "Pop2050": 11368, - "Location": [ - 34.63, - 135.51 - ] - }, - { - "City": "Sapporo", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 750, - "Pop1955": 890, - "Pop1960": 1060, - "Pop1965": 1250, - "Pop1970": 1480, - "Pop1975": 1750, - "Pop1980": 2000, - "Pop1985": 2160, - "Pop1990": 2320, - "Pop1995": 2480, - "Pop2000": 2510, - "Pop2005": 2530, - "Pop2010": 2540, - "Pop2015": 2560, - "Pop2020": 2560, - "Pop2025": 2560, - "Pop2050": 2565, - "Location": [ - 43.05, - 141.34 - ] - }, - { - "City": "Sendai", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 540, - "Pop1955": 670, - "Pop1960": 820, - "Pop1965": 1020, - "Pop1970": 1260, - "Pop1975": 1570, - "Pop1980": 1730, - "Pop1985": 1860, - "Pop1990": 2020, - "Pop1995": 2140, - "Pop2000": 2180, - "Pop2005": 2230, - "Pop2010": 2250, - "Pop2015": 2270, - "Pop2020": 2290, - "Pop2025": 2290, - "Pop2050": 2288, - "Location": [ - 38.25, - 140.89 - ] - }, - { - "City": "Tokyo", - "Country": "Japan", - "Country_ISO3": "JPN", - "Pop1950": 11280, - "Pop1955": 13710, - "Pop1960": 16680, - "Pop1965": 20280, - "Pop1970": 23300, - "Pop1975": 26620, - "Pop1980": 28550, - "Pop1985": 30300, - "Pop1990": 32530, - "Pop1995": 33590, - "Pop2000": 34450, - "Pop2005": 35330, - "Pop2010": 35680, - "Pop2015": 36090, - "Pop2020": 36370, - "Pop2025": 36400, - "Pop2050": 36400, - "Location": [ - 35.68, - 139.8 - ] - }, - { - "City": "Almaty", - "Country": "Kazakhstan", - "Country_ISO3": "KAZ", - "Pop1950": 350, - "Pop1955": 440, - "Pop1960": 530, - "Pop1965": 630, - "Pop1970": 740, - "Pop1975": 860, - "Pop1980": 970, - "Pop1985": 1030, - "Pop1990": 1080, - "Pop1995": 1110, - "Pop2000": 1140, - "Pop2005": 1190, - "Pop2010": 1210, - "Pop2015": 1240, - "Pop2020": 1300, - "Pop2025": 1360, - "Pop2050": 1404, - "Location": [ - 43.25, - 76.91 - ] - }, - { - "City": "Kabul", - "Country": "Afghanistan", - "Country_ISO3": "AFG", - "Pop1950": 130, - "Pop1955": 180, - "Pop1960": 260, - "Pop1965": 370, - "Pop1970": 470, - "Pop1975": 670, - "Pop1980": 980, - "Pop1985": 1160, - "Pop1990": 1310, - "Pop1995": 1620, - "Pop2000": 1960, - "Pop2005": 2990, - "Pop2010": 3280, - "Pop2015": 3770, - "Pop2020": 4730, - "Pop2025": 5840, - "Pop2050": 7175, - "Location": [ - 34.53, - 69.13 - ] - }, - { - "City": "Wien", - "Country": "Austria", - "Country_ISO3": "AUT", - "Pop1950": 2090, - "Pop1955": 2090, - "Pop1960": 2090, - "Pop1965": 2080, - "Pop1970": 2070, - "Pop1975": 2060, - "Pop1980": 2050, - "Pop1985": 2070, - "Pop1990": 2100, - "Pop1995": 2130, - "Pop2000": 2160, - "Pop2005": 2260, - "Pop2010": 2320, - "Pop2015": 2380, - "Pop2020": 2450, - "Pop2025": 2480, - "Pop2050": 2496, - "Location": [ - 48.2, - 16.32 - ] - }, - { - "City": "Amman", - "Country": "Jordan", - "Country_ISO3": "JOR", - "Pop1950": 90, - "Pop1955": 140, - "Pop1960": 220, - "Pop1965": 300, - "Pop1970": 390, - "Pop1975": 500, - "Pop1980": 640, - "Pop1985": 740, - "Pop1990": 850, - "Pop1995": 970, - "Pop2000": 1010, - "Pop2005": 1040, - "Pop2010": 1060, - "Pop2015": 1110, - "Pop2020": 1180, - "Pop2025": 1270, - "Pop2050": 1359, - "Location": [ - 31.94, - 35.93 - ] - }, - { - "City": "Mombasa", - "Country": "Kenya", - "Country_ISO3": "KEN", - "Pop1950": 90, - "Pop1955": 120, - "Pop1960": 160, - "Pop1965": 200, - "Pop1970": 250, - "Pop1975": 300, - "Pop1980": 350, - "Pop1985": 410, - "Pop1990": 480, - "Pop1995": 570, - "Pop2000": 690, - "Pop2005": 820, - "Pop2010": 880, - "Pop2015": 980, - "Pop2020": 1200, - "Pop2025": 1450, - "Pop2050": 1763, - "Location": [ - -4.05, - 39.65 - ] - }, - { - "City": "Nairobi", - "Country": "Kenya", - "Country_ISO3": "KEN", - "Pop1950": 140, - "Pop1955": 200, - "Pop1960": 290, - "Pop1965": 400, - "Pop1970": 530, - "Pop1975": 680, - "Pop1980": 860, - "Pop1985": 1090, - "Pop1990": 1380, - "Pop1995": 1760, - "Pop2000": 2230, - "Pop2005": 2790, - "Pop2010": 3010, - "Pop2015": 3360, - "Pop2020": 4050, - "Pop2025": 4880, - "Pop2050": 5871, - "Location": [ - -1.26, - 36.8 - ] - }, - { - "City": "Hamhung", - "Country": "Democratic People's Republic of Korea", - "Country_ISO3": "PRK", - "Pop1950": 170, - "Pop1955": 220, - "Pop1960": 280, - "Pop1965": 370, - "Pop1970": 450, - "Pop1975": 520, - "Pop1980": 590, - "Pop1985": 670, - "Pop1990": 700, - "Pop1995": 710, - "Pop2000": 730, - "Pop2005": 760, - "Pop2010": 770, - "Pop2015": 790, - "Pop2020": 820, - "Pop2025": 850, - "Pop2050": 882, - "Location": [ - 39.91, - 127.55 - ] - }, - { - "City": "N'ampo", - "Country": "Democratic People's Republic of Korea", - "Country_ISO3": "PRK", - "Pop1950": 50, - "Pop1955": 70, - "Pop1960": 90, - "Pop1965": 120, - "Pop1970": 150, - "Pop1975": 220, - "Pop1980": 300, - "Pop1985": 420, - "Pop1990": 580, - "Pop1995": 810, - "Pop2000": 1020, - "Pop2005": 1110, - "Pop2010": 1130, - "Pop2015": 1150, - "Pop2020": 1190, - "Pop2025": 1230, - "Pop2050": 1274, - "Location": [ - 38.73, - 125.4 - ] - }, - { - "City": "P'yongyang", - "Country": "Democratic People's Republic of Korea", - "Country_ISO3": "PRK", - "Pop1950": 520, - "Pop1955": 580, - "Pop1960": 650, - "Pop1965": 770, - "Pop1970": 990, - "Pop1975": 1350, - "Pop1980": 1840, - "Pop1985": 2200, - "Pop1990": 2530, - "Pop1995": 2840, - "Pop2000": 3120, - "Pop2005": 3260, - "Pop2010": 3300, - "Pop2015": 3350, - "Pop2020": 3430, - "Pop2025": 3540, - "Pop2050": 3630, - "Location": [ - 39.02, - 125.75 - ] - }, - { - "City": "Bucheon", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 30, - "Pop1955": 40, - "Pop1960": 50, - "Pop1965": 60, - "Pop1970": 80, - "Pop1975": 110, - "Pop1980": 210, - "Pop1985": 440, - "Pop1990": 650, - "Pop1995": 770, - "Pop2000": 760, - "Pop2005": 830, - "Pop2010": 870, - "Pop2015": 910, - "Pop2020": 940, - "Pop2025": 950, - "Pop2050": 948, - "Location": [ - 37.5, - 126.78 - ] - }, - { - "City": "Busan", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 950, - "Pop1955": 1050, - "Pop1960": 1150, - "Pop1965": 1360, - "Pop1970": 1810, - "Pop1975": 2420, - "Pop1980": 3110, - "Pop1985": 3490, - "Pop1990": 3780, - "Pop1995": 3810, - "Pop2000": 3670, - "Pop2005": 3530, - "Pop2010": 3480, - "Pop2015": 3420, - "Pop2020": 3390, - "Pop2025": 3380, - "Pop2050": 3383, - "Location": [ - 35.1, - 129.03 - ] - }, - { - "City": "Daegu", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 360, - "Pop1955": 480, - "Pop1960": 660, - "Pop1965": 810, - "Pop1970": 1050, - "Pop1975": 1300, - "Pop1980": 1580, - "Pop1985": 2000, - "Pop1990": 2220, - "Pop1995": 2430, - "Pop2000": 2480, - "Pop2005": 2470, - "Pop2010": 2460, - "Pop2015": 2460, - "Pop2020": 2460, - "Pop2025": 2460, - "Pop2050": 2458, - "Location": [ - 35.86, - 128.6 - ] - }, - { - "City": "Daejon", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 130, - "Pop1955": 170, - "Pop1960": 220, - "Pop1965": 290, - "Pop1970": 400, - "Pop1975": 500, - "Pop1980": 640, - "Pop1985": 850, - "Pop1990": 1040, - "Pop1995": 1260, - "Pop2000": 1360, - "Pop2005": 1440, - "Pop2010": 1470, - "Pop2015": 1510, - "Pop2020": 1540, - "Pop2025": 1540, - "Pop2050": 1544, - "Location": [ - 36.35, - 127.38 - ] - }, - { - "City": "Goyang", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 40, - "Pop1955": 50, - "Pop1960": 60, - "Pop1965": 80, - "Pop1970": 100, - "Pop1975": 120, - "Pop1980": 150, - "Pop1985": 190, - "Pop1990": 240, - "Pop1995": 490, - "Pop2000": 740, - "Pop2005": 860, - "Pop2010": 900, - "Pop2015": 960, - "Pop2020": 1000, - "Pop2025": 1010, - "Pop2050": 1012, - "Location": [ - 37.65, - 126.8 - ] - }, - { - "City": "Gwangju", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 170, - "Pop1955": 230, - "Pop1960": 310, - "Pop1965": 380, - "Pop1970": 490, - "Pop1975": 600, - "Pop1980": 720, - "Pop1985": 890, - "Pop1990": 1120, - "Pop1995": 1250, - "Pop2000": 1350, - "Pop2005": 1410, - "Pop2010": 1440, - "Pop2015": 1470, - "Pop2020": 1500, - "Pop2025": 1510, - "Pop2050": 1507, - "Location": [ - 35.16, - 126.91 - ] - }, - { - "City": "Incheon", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 260, - "Pop1955": 320, - "Pop1960": 390, - "Pop1965": 500, - "Pop1970": 630, - "Pop1975": 790, - "Pop1980": 1060, - "Pop1985": 1360, - "Pop1990": 1780, - "Pop1995": 2270, - "Pop2000": 2460, - "Pop2005": 2530, - "Pop2010": 2550, - "Pop2015": 2580, - "Pop2020": 2600, - "Pop2025": 2610, - "Pop2050": 2607, - "Location": [ - 37.48, - 126.63 - ] - }, - { - "City": "Seongnam", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 50, - "Pop1955": 80, - "Pop1960": 100, - "Pop1965": 140, - "Pop1970": 200, - "Pop1975": 270, - "Pop1980": 370, - "Pop1985": 440, - "Pop1990": 530, - "Pop1995": 840, - "Pop2000": 910, - "Pop2005": 930, - "Pop2010": 940, - "Pop2015": 950, - "Pop2020": 970, - "Pop2025": 970, - "Pop2050": 971, - "Location": [ - 37.43, - 127.15 - ] - }, - { - "City": "Seoul", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 1020, - "Pop1955": 1550, - "Pop1960": 2360, - "Pop1965": 3450, - "Pop1970": 5310, - "Pop1975": 6810, - "Pop1980": 8260, - "Pop1985": 9550, - "Pop1990": 10540, - "Pop1995": 10260, - "Pop2000": 9920, - "Pop2005": 9820, - "Pop2010": 9800, - "Pop2015": 9760, - "Pop2020": 9740, - "Pop2025": 9740, - "Pop2050": 9738, - "Location": [ - 37.54, - 126.93 - ] - }, - { - "City": "Suweon", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 70, - "Pop1955": 80, - "Pop1960": 90, - "Pop1965": 160, - "Pop1970": 170, - "Pop1975": 220, - "Pop1980": 300, - "Pop1985": 420, - "Pop1990": 630, - "Pop1995": 750, - "Pop2000": 930, - "Pop2005": 1040, - "Pop2010": 1080, - "Pop2015": 1130, - "Pop2020": 1170, - "Pop2025": 1180, - "Pop2050": 1179, - "Location": [ - 37.26, - 127.01 - ] - }, - { - "City": "Ulsan", - "Country": "Republic of Korea", - "Country_ISO3": "KOR", - "Pop1950": 30, - "Pop1955": 40, - "Pop1960": 70, - "Pop1965": 100, - "Pop1970": 150, - "Pop1975": 250, - "Pop1980": 400, - "Pop1985": 540, - "Pop1990": 670, - "Pop1995": 940, - "Pop2000": 1010, - "Pop2005": 1050, - "Pop2010": 1060, - "Pop2015": 1080, - "Pop2020": 1100, - "Pop2025": 1100, - "Pop2050": 1102, - "Location": [ - 35.55, - 129.31 - ] - }, - { - "City": "Al Kuwayt (Kuwait City)", - "Country": "Kuwait", - "Country_ISO3": "KWT", - "Pop1950": 60, - "Pop1955": 110, - "Pop1960": 180, - "Pop1965": 300, - "Pop1970": 550, - "Pop1975": 690, - "Pop1980": 890, - "Pop1985": 1120, - "Pop1990": 1390, - "Pop1995": 1190, - "Pop2000": 1500, - "Pop2005": 1890, - "Pop2010": 2060, - "Pop2015": 2300, - "Pop2020": 2590, - "Pop2025": 2790, - "Pop2050": 2956, - "Location": [ - 29.38, - 47.97 - ] - }, - { - "City": "Bishkek", - "Country": "Kyrgyzstan", - "Country_ISO3": "KGZ", - "Pop1950": 150, - "Pop1955": 190, - "Pop1960": 240, - "Pop1965": 320, - "Pop1970": 430, - "Pop1975": 480, - "Pop1980": 540, - "Pop1985": 580, - "Pop1990": 640, - "Pop1995": 700, - "Pop2000": 770, - "Pop2005": 820, - "Pop2010": 840, - "Pop2015": 870, - "Pop2020": 930, - "Pop2025": 1010, - "Pop2050": 1096, - "Location": [ - 42.87, - 74.77 - ] - }, - { - "City": "Bayrut", - "Country": "Lebanon", - "Country_ISO3": "LBN", - "Pop1950": 320, - "Pop1955": 420, - "Pop1960": 560, - "Pop1965": 730, - "Pop1970": 920, - "Pop1975": 1500, - "Pop1980": 1620, - "Pop1985": 1580, - "Pop1990": 1290, - "Pop1995": 1270, - "Pop2000": 1490, - "Pop2005": 1780, - "Pop2010": 1850, - "Pop2015": 1940, - "Pop2020": 2050, - "Pop2025": 2120, - "Pop2050": 2173, - "Location": [ - 33.88, - 35.49 - ] - }, - { - "City": "Monrovia", - "Country": "Liberia", - "Country_ISO3": "LBR", - "Pop1950": 20, - "Pop1955": 30, - "Pop1960": 80, - "Pop1965": 120, - "Pop1970": 160, - "Pop1975": 230, - "Pop1980": 320, - "Pop1985": 510, - "Pop1990": 1040, - "Pop1995": 460, - "Pop2000": 840, - "Pop2005": 1140, - "Pop2010": 1040, - "Pop2015": 1180, - "Pop2020": 1460, - "Pop2025": 1750, - "Pop2050": 2083, - "Location": [ - 6.3, - -10.79 - ] - }, - { - "City": "Banghazi", - "Country": "Libyan Arab Jamahiriya", - "Country_ISO3": "LBY", - "Pop1950": 50, - "Pop1955": 70, - "Pop1960": 100, - "Pop1965": 150, - "Pop1970": 220, - "Pop1975": 310, - "Pop1980": 380, - "Pop1985": 470, - "Pop1990": 610, - "Pop1995": 800, - "Pop2000": 940, - "Pop2005": 1110, - "Pop2010": 1180, - "Pop2015": 1270, - "Pop2020": 1400, - "Pop2025": 1500, - "Pop2050": 1590, - "Location": [ - 32.12, - 20.06 - ] - }, - { - "City": "Tarabulus", - "Country": "Libyan Arab Jamahiriya", - "Country_ISO3": "LBY", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 170, - "Pop1965": 240, - "Pop1970": 400, - "Pop1975": 610, - "Pop1980": 800, - "Pop1985": 1060, - "Pop1990": 1500, - "Pop1995": 1680, - "Pop2000": 1880, - "Pop2005": 2100, - "Pop2010": 2190, - "Pop2015": 2320, - "Pop2020": 2530, - "Pop2025": 2710, - "Pop2050": 2855, - "Location": [ - 32.9, - 13.18 - ] - }, - { - "City": "Antananarivo", - "Country": "Madagascar", - "Country_ISO3": "MDG", - "Pop1950": 180, - "Pop1955": 190, - "Pop1960": 250, - "Pop1965": 300, - "Pop1970": 360, - "Pop1975": 450, - "Pop1980": 580, - "Pop1985": 740, - "Pop1990": 950, - "Pop1995": 1170, - "Pop2000": 1360, - "Pop2005": 1590, - "Pop2010": 1700, - "Pop2015": 1880, - "Pop2020": 2230, - "Pop2025": 2640, - "Pop2050": 3118, - "Location": [ - -18.9, - 47.52 - ] - }, - { - "City": "Johore Bharu", - "Country": "Malaysia", - "Country_ISO3": "MYS", - "Pop1950": 50, - "Pop1955": 70, - "Pop1960": 90, - "Pop1965": 110, - "Pop1970": 140, - "Pop1975": 180, - "Pop1980": 250, - "Pop1985": 320, - "Pop1990": 420, - "Pop1995": 520, - "Pop2000": 630, - "Pop2005": 800, - "Pop2010": 880, - "Pop2015": 1000, - "Pop2020": 1180, - "Pop2025": 1290, - "Pop2050": 1382, - "Location": [ - 1.5, - 103.76 - ] - }, - { - "City": "Klang", - "Country": "Malaysia", - "Country_ISO3": "MYS", - "Pop1950": 40, - "Pop1955": 60, - "Pop1960": 80, - "Pop1965": 100, - "Pop1970": 110, - "Pop1975": 150, - "Pop1980": 190, - "Pop1985": 260, - "Pop1990": 340, - "Pop1995": 470, - "Pop2000": 630, - "Pop2005": 850, - "Pop2010": 960, - "Pop2015": 1130, - "Pop2020": 1360, - "Pop2025": 1500, - "Pop2050": 1603, - "Location": [ - 3.03, - 101.45 - ] - }, - { - "City": "Kuala Lumpur", - "Country": "Malaysia", - "Country_ISO3": "MYS", - "Pop1950": 210, - "Pop1955": 280, - "Pop1960": 340, - "Pop1965": 390, - "Pop1970": 450, - "Pop1975": 640, - "Pop1980": 920, - "Pop1985": 1020, - "Pop1990": 1120, - "Pop1995": 1210, - "Pop2000": 1310, - "Pop2005": 1400, - "Pop2010": 1450, - "Pop2015": 1520, - "Pop2020": 1670, - "Pop2025": 1820, - "Pop2050": 1938, - "Location": [ - 3.14, - 101.7 - ] - }, - { - "City": "Bamako", - "Country": "Mali", - "Country_ISO3": "MLI", - "Pop1950": 90, - "Pop1955": 110, - "Pop1960": 130, - "Pop1965": 160, - "Pop1970": 220, - "Pop1975": 360, - "Pop1980": 490, - "Pop1985": 610, - "Pop1990": 750, - "Pop1995": 910, - "Pop2000": 1110, - "Pop2005": 1370, - "Pop2010": 1490, - "Pop2015": 1710, - "Pop2020": 2130, - "Pop2025": 2630, - "Pop2050": 3214, - "Location": [ - 12.65, - -7.98 - ] - }, - { - "City": "Aguascalientes", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 90, - "Pop1955": 110, - "Pop1960": 130, - "Pop1965": 150, - "Pop1970": 180, - "Pop1975": 230, - "Pop1980": 300, - "Pop1985": 400, - "Pop1990": 550, - "Pop1995": 630, - "Pop2000": 730, - "Pop2005": 830, - "Pop2010": 870, - "Pop2015": 930, - "Pop2020": 1000, - "Pop2025": 1050, - "Pop2050": 1089, - "Location": [ - 21.88, - -102.29 - ] - }, - { - "City": "Chihuahua", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 90, - "Pop1955": 130, - "Pop1960": 190, - "Pop1965": 240, - "Pop1970": 290, - "Pop1975": 340, - "Pop1980": 410, - "Pop1985": 470, - "Pop1990": 540, - "Pop1995": 620, - "Pop2000": 680, - "Pop2005": 760, - "Pop2010": 790, - "Pop2015": 840, - "Pop2020": 900, - "Pop2025": 950, - "Pop2050": 985, - "Location": [ - 28.63, - -106.07 - ] - }, - { - "City": "Ciudad de México", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 2880, - "Pop1955": 3800, - "Pop1960": 5010, - "Pop1965": 6650, - "Pop1970": 8770, - "Pop1975": 10690, - "Pop1980": 13010, - "Pop1985": 14110, - "Pop1990": 15310, - "Pop1995": 16810, - "Pop2000": 18020, - "Pop2005": 18740, - "Pop2010": 19030, - "Pop2015": 19480, - "Pop2020": 20190, - "Pop2025": 20700, - "Pop2050": 21009, - "Location": [ - 19.42, - -99.12 - ] - }, - { - "City": "Ciudad Juárez", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 120, - "Pop1955": 180, - "Pop1960": 260, - "Pop1965": 330, - "Pop1970": 410, - "Pop1975": 470, - "Pop1980": 550, - "Pop1985": 660, - "Pop1990": 810, - "Pop1995": 1000, - "Pop2000": 1220, - "Pop2005": 1310, - "Pop2010": 1340, - "Pop2015": 1400, - "Pop2020": 1480, - "Pop2025": 1540, - "Pop2050": 1597, - "Location": [ - 31.73, - -106.48 - ] - }, - { - "City": "Culiacán", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 50, - "Pop1955": 60, - "Pop1960": 80, - "Pop1965": 120, - "Pop1970": 170, - "Pop1975": 230, - "Pop1980": 310, - "Pop1985": 430, - "Pop1990": 610, - "Pop1995": 690, - "Pop2000": 750, - "Pop2005": 790, - "Pop2010": 810, - "Pop2015": 840, - "Pop2020": 890, - "Pop2025": 930, - "Pop2050": 964, - "Location": [ - 24.8, - -107.38 - ] - }, - { - "City": "Guadalajara", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 400, - "Pop1955": 590, - "Pop1960": 870, - "Pop1965": 1150, - "Pop1970": 1510, - "Pop1975": 1850, - "Pop1980": 2270, - "Pop1985": 2620, - "Pop1990": 3010, - "Pop1995": 3430, - "Pop2000": 3700, - "Pop2005": 4050, - "Pop2010": 4200, - "Pop2015": 4410, - "Pop2020": 4670, - "Pop2025": 4850, - "Pop2050": 4973, - "Location": [ - 20.67, - -103.34 - ] - }, - { - "City": "León de los Aldamas", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 120, - "Pop1955": 190, - "Pop1960": 300, - "Pop1965": 380, - "Pop1970": 480, - "Pop1975": 590, - "Pop1980": 720, - "Pop1985": 830, - "Pop1990": 960, - "Pop1995": 1130, - "Pop2000": 1290, - "Pop2005": 1430, - "Pop2010": 1490, - "Pop2015": 1570, - "Pop2020": 1680, - "Pop2025": 1760, - "Pop2050": 1817, - "Location": [ - 21.11, - -101.68 - ] - }, - { - "City": "Mérida", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 140, - "Pop1955": 170, - "Pop1960": 210, - "Pop1965": 240, - "Pop1970": 270, - "Pop1975": 350, - "Pop1980": 460, - "Pop1985": 550, - "Pop1990": 660, - "Pop1995": 760, - "Pop2000": 850, - "Pop2005": 930, - "Pop2010": 960, - "Pop2015": 1020, - "Pop2020": 1090, - "Pop2025": 1140, - "Pop2050": 1180, - "Location": [ - 20.97, - -89.62 - ] - }, - { - "City": "Mexicali", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 70, - "Pop1955": 110, - "Pop1960": 180, - "Pop1965": 220, - "Pop1970": 270, - "Pop1975": 300, - "Pop1980": 340, - "Pop1985": 460, - "Pop1990": 610, - "Pop1995": 690, - "Pop2000": 770, - "Pop2005": 850, - "Pop2010": 880, - "Pop2015": 940, - "Pop2020": 1000, - "Pop2025": 1050, - "Pop2050": 1090, - "Location": [ - 32.65, - -115.46 - ] - }, - { - "City": "Monterrey", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 360, - "Pop1955": 500, - "Pop1960": 700, - "Pop1965": 940, - "Pop1970": 1270, - "Pop1975": 1590, - "Pop1980": 1990, - "Pop1985": 2270, - "Pop1990": 2590, - "Pop1995": 2960, - "Pop2000": 3270, - "Pop2005": 3580, - "Pop2010": 3710, - "Pop2015": 3900, - "Pop2020": 4140, - "Pop2025": 4300, - "Pop2050": 4413, - "Location": [ - 25.67, - -100.31 - ] - }, - { - "City": "Puebla", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 230, - "Pop1955": 290, - "Pop1960": 380, - "Pop1965": 490, - "Pop1970": 640, - "Pop1975": 860, - "Pop1980": 1140, - "Pop1985": 1400, - "Pop1990": 1690, - "Pop1995": 1690, - "Pop2000": 1910, - "Pop2005": 2110, - "Pop2010": 2200, - "Pop2015": 2320, - "Pop2020": 2470, - "Pop2025": 2580, - "Pop2050": 2657, - "Location": [ - 19.04, - -98.19 - ] - }, - { - "City": "Querétaro", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 50, - "Pop1955": 60, - "Pop1960": 70, - "Pop1965": 90, - "Pop1970": 120, - "Pop1975": 160, - "Pop1980": 220, - "Pop1985": 350, - "Pop1990": 560, - "Pop1995": 670, - "Pop2000": 800, - "Pop2005": 910, - "Pop2010": 960, - "Pop2015": 1030, - "Pop2020": 1120, - "Pop2025": 1170, - "Pop2050": 1215, - "Location": [ - 20.58, - -100.38 - ] - }, - { - "City": "Saltillo", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 70, - "Pop1955": 80, - "Pop1960": 100, - "Pop1965": 130, - "Pop1970": 160, - "Pop1975": 220, - "Pop1980": 290, - "Pop1985": 380, - "Pop1990": 490, - "Pop1995": 580, - "Pop2000": 640, - "Pop2005": 720, - "Pop2010": 750, - "Pop2015": 800, - "Pop2020": 860, - "Pop2025": 910, - "Pop2050": 942, - "Location": [ - 25.41, - -100.99 - ] - }, - { - "City": "San Luis Potosí", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 130, - "Pop1955": 160, - "Pop1960": 210, - "Pop1965": 250, - "Pop1970": 300, - "Pop1975": 380, - "Pop1980": 470, - "Pop1985": 560, - "Pop1990": 660, - "Pop1995": 770, - "Pop2000": 860, - "Pop2005": 950, - "Pop2010": 990, - "Pop2015": 1050, - "Pop2020": 1130, - "Pop2025": 1180, - "Pop2050": 1223, - "Location": [ - 22.15, - -100.97 - ] - }, - { - "City": "Tijuana", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 60, - "Pop1955": 100, - "Pop1960": 150, - "Pop1965": 210, - "Pop1970": 290, - "Pop1975": 360, - "Pop1980": 440, - "Pop1985": 580, - "Pop1990": 760, - "Pop1995": 1020, - "Pop2000": 1290, - "Pop2005": 1470, - "Pop2010": 1550, - "Pop2015": 1670, - "Pop2020": 1800, - "Pop2025": 1880, - "Pop2050": 1943, - "Location": [ - 32.52, - -117.03 - ] - }, - { - "City": "Toluca de Lerdo", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 50, - "Pop1955": 70, - "Pop1960": 90, - "Pop1965": 120, - "Pop1970": 160, - "Pop1975": 310, - "Pop1980": 600, - "Pop1985": 710, - "Pop1990": 840, - "Pop1995": 980, - "Pop2000": 1420, - "Pop2005": 1500, - "Pop2010": 1530, - "Pop2015": 1580, - "Pop2020": 1670, - "Pop2025": 1740, - "Pop2050": 1802, - "Location": [ - 19.28, - -99.66 - ] - }, - { - "City": "Torreón", - "Country": "Mexico", - "Country_ISO3": "MEX", - "Pop1950": 190, - "Pop1955": 260, - "Pop1960": 350, - "Pop1965": 390, - "Pop1970": 450, - "Pop1975": 560, - "Pop1980": 690, - "Pop1985": 780, - "Pop1990": 880, - "Pop1995": 950, - "Pop2000": 1010, - "Pop2005": 1100, - "Pop2010": 1140, - "Pop2015": 1200, - "Pop2020": 1280, - "Pop2025": 1340, - "Pop2050": 1387, - "Location": [ - 25.55, - -103.76 - ] - }, - { - "City": "Ulaanbaatar", - "Country": "Mongolia", - "Country_ISO3": "MNG", - "Pop1950": 70, - "Pop1955": 110, - "Pop1960": 180, - "Pop1965": 250, - "Pop1970": 300, - "Pop1975": 360, - "Pop1980": 420, - "Pop1985": 490, - "Pop1990": 570, - "Pop1995": 660, - "Pop2000": 760, - "Pop2005": 860, - "Pop2010": 880, - "Pop2015": 920, - "Pop2020": 980, - "Pop2025": 1040, - "Pop2050": 1112, - "Location": [ - 47.92, - 106.91 - ] - }, - { - "City": "Chittagong", - "Country": "Bangladesh", - "Country_ISO3": "BGD", - "Pop1950": 290, - "Pop1955": 320, - "Pop1960": 360, - "Pop1965": 500, - "Pop1970": 720, - "Pop1975": 1020, - "Pop1980": 1340, - "Pop1985": 1660, - "Pop1990": 2020, - "Pop1995": 2580, - "Pop2000": 3310, - "Pop2005": 4190, - "Pop2010": 4530, - "Pop2015": 5010, - "Pop2020": 5810, - "Pop2025": 6690, - "Pop2050": 7639, - "Location": [ - 22.32, - 91.82 - ] - }, - { - "City": "Dhaka", - "Country": "Bangladesh", - "Country_ISO3": "BGD", - "Pop1950": 340, - "Pop1955": 410, - "Pop1960": 510, - "Pop1965": 820, - "Pop1970": 1370, - "Pop1975": 2220, - "Pop1980": 3270, - "Pop1985": 4660, - "Pop1990": 6620, - "Pop1995": 8330, - "Pop2000": 10280, - "Pop2005": 12580, - "Pop2010": 13480, - "Pop2015": 14800, - "Pop2020": 17020, - "Pop2025": 19420, - "Pop2050": 22015, - "Location": [ - 23.7, - 90.4 - ] - }, - { - "City": "Khulna", - "Country": "Bangladesh", - "Country_ISO3": "BGD", - "Pop1950": 40, - "Pop1955": 70, - "Pop1960": 120, - "Pop1965": 190, - "Pop1970": 310, - "Pop1975": 470, - "Pop1980": 630, - "Pop1985": 790, - "Pop1990": 980, - "Pop1995": 1130, - "Pop2000": 1280, - "Pop2005": 1470, - "Pop2010": 1550, - "Pop2015": 1700, - "Pop2020": 1980, - "Pop2025": 2290, - "Pop2050": 2640, - "Location": [ - 22.84, - 89.55 - ] - }, - { - "City": "Rajshahi", - "Country": "Bangladesh", - "Country_ISO3": "BGD", - "Pop1950": 40, - "Pop1955": 50, - "Pop1960": 60, - "Pop1965": 80, - "Pop1970": 100, - "Pop1975": 150, - "Pop1980": 240, - "Pop1985": 350, - "Pop1990": 520, - "Pop1995": 610, - "Pop2000": 680, - "Pop2005": 770, - "Pop2010": 810, - "Pop2015": 890, - "Pop2020": 1040, - "Pop2025": 1210, - "Pop2050": 1396, - "Location": [ - 24.35, - 88.63 - ] - }, - { - "City": "Dar-el-Beida", - "Country": "Morocco", - "Country_ISO3": "MAR", - "Pop1950": 620, - "Pop1955": 780, - "Pop1960": 970, - "Pop1965": 1210, - "Pop1970": 1500, - "Pop1975": 1790, - "Pop1980": 2110, - "Pop1985": 2410, - "Pop1990": 2680, - "Pop1995": 2950, - "Pop2000": 3040, - "Pop2005": 3140, - "Pop2010": 3180, - "Pop2015": 3270, - "Pop2020": 3480, - "Pop2025": 3720, - "Pop2050": 3949, - "Location": [ - 33.6, - -7.63 - ] - }, - { - "City": "Fès", - "Country": "Morocco", - "Country_ISO3": "MAR", - "Pop1950": 160, - "Pop1955": 220, - "Pop1960": 280, - "Pop1965": 320, - "Pop1970": 370, - "Pop1975": 430, - "Pop1980": 510, - "Pop1985": 590, - "Pop1990": 680, - "Pop1995": 780, - "Pop2000": 870, - "Pop2005": 960, - "Pop2010": 1000, - "Pop2015": 1060, - "Pop2020": 1150, - "Pop2025": 1240, - "Pop2050": 1332, - "Location": [ - 34.04, - -4.99 - ] - }, - { - "City": "Marrakech", - "Country": "Morocco", - "Country_ISO3": "MAR", - "Pop1950": 210, - "Pop1955": 220, - "Pop1960": 240, - "Pop1965": 280, - "Pop1970": 320, - "Pop1975": 370, - "Pop1980": 420, - "Pop1985": 480, - "Pop1990": 580, - "Pop1995": 680, - "Pop2000": 760, - "Pop2005": 840, - "Pop2010": 870, - "Pop2015": 920, - "Pop2020": 1000, - "Pop2025": 1080, - "Pop2050": 1163, - "Location": [ - 31.63, - -8.01 - ] - }, - { - "City": "Rabat", - "Country": "Morocco", - "Country_ISO3": "MAR", - "Pop1950": 140, - "Pop1955": 180, - "Pop1960": 230, - "Pop1965": 340, - "Pop1970": 490, - "Pop1975": 640, - "Pop1980": 810, - "Pop1985": 990, - "Pop1990": 1170, - "Pop1995": 1380, - "Pop2000": 1510, - "Pop2005": 1650, - "Pop2010": 1700, - "Pop2015": 1790, - "Pop2020": 1940, - "Pop2025": 2080, - "Pop2050": 2222, - "Location": [ - 34.01, - -6.83 - ] - }, - { - "City": "Maputo", - "Country": "Mozambique", - "Country_ISO3": "MOZ", - "Pop1950": 90, - "Pop1955": 130, - "Pop1960": 180, - "Pop1965": 260, - "Pop1970": 370, - "Pop1975": 460, - "Pop1980": 550, - "Pop1985": 650, - "Pop1990": 780, - "Pop1995": 920, - "Pop2000": 1100, - "Pop2005": 1330, - "Pop2010": 1450, - "Pop2015": 1620, - "Pop2020": 1920, - "Pop2025": 2240, - "Pop2050": 2560, - "Location": [ - -25.96, - 32.57 - ] - }, - { - "City": "Yerevan", - "Country": "Armenia", - "Country_ISO3": "ARM", - "Pop1950": 340, - "Pop1955": 430, - "Pop1960": 540, - "Pop1965": 650, - "Pop1970": 780, - "Pop1975": 910, - "Pop1980": 1040, - "Pop1985": 1120, - "Pop1990": 1180, - "Pop1995": 1140, - "Pop2000": 1110, - "Pop2005": 1100, - "Pop2010": 1100, - "Pop2015": 1100, - "Pop2020": 1100, - "Pop2025": 1100, - "Pop2050": 1102, - "Location": [ - 40.2, - 44.53 - ] - }, - { - "City": "Kathmandu", - "Country": "Nepal", - "Country_ISO3": "NPL", - "Pop1950": 100, - "Pop1955": 110, - "Pop1960": 120, - "Pop1965": 130, - "Pop1970": 150, - "Pop1975": 180, - "Pop1980": 220, - "Pop1985": 300, - "Pop1990": 400, - "Pop1995": 510, - "Pop2000": 640, - "Pop2005": 820, - "Pop2010": 900, - "Pop2015": 1030, - "Pop2020": 1280, - "Pop2025": 1580, - "Pop2050": 1907, - "Location": [ - 27.71, - 85.31 - ] - }, - { - "City": "Amsterdam", - "Country": "Netherlands", - "Country_ISO3": "NLD", - "Pop1950": 850, - "Pop1955": 870, - "Pop1960": 900, - "Pop1965": 940, - "Pop1970": 930, - "Pop1975": 980, - "Pop1980": 940, - "Pop1985": 910, - "Pop1990": 940, - "Pop1995": 990, - "Pop2000": 1000, - "Pop2005": 1020, - "Pop2010": 1030, - "Pop2015": 1040, - "Pop2020": 1060, - "Pop2025": 1080, - "Pop2050": 1089, - "Location": [ - 52.37, - 4.89 - ] - }, - { - "City": "Rotterdam", - "Country": "Netherlands", - "Country_ISO3": "NLD", - "Pop1950": 760, - "Pop1955": 850, - "Pop1960": 940, - "Pop1965": 970, - "Pop1970": 970, - "Pop1975": 930, - "Pop1980": 910, - "Pop1985": 930, - "Pop1990": 950, - "Pop1995": 980, - "Pop2000": 990, - "Pop2005": 1000, - "Pop2010": 1000, - "Pop2015": 1010, - "Pop2020": 1030, - "Pop2025": 1050, - "Pop2050": 1057, - "Location": [ - 51.92, - 4.48 - ] - }, - { - "City": "Auckland", - "Country": "New Zealand", - "Country_ISO3": "NZL", - "Pop1950": 320, - "Pop1955": 390, - "Pop1960": 440, - "Pop1965": 530, - "Pop1970": 640, - "Pop1975": 730, - "Pop1980": 770, - "Pop1985": 810, - "Pop1990": 870, - "Pop1995": 980, - "Pop2000": 1060, - "Pop2005": 1190, - "Pop2010": 1240, - "Pop2015": 1320, - "Pop2020": 1400, - "Pop2025": 1440, - "Pop2050": 1475, - "Location": [ - -36.9, - 174.76 - ] - }, - { - "City": "Managua", - "Country": "Nicaragua", - "Country_ISO3": "NIC", - "Pop1950": 110, - "Pop1955": 150, - "Pop1960": 200, - "Pop1965": 270, - "Pop1970": 370, - "Pop1975": 440, - "Pop1980": 520, - "Pop1985": 620, - "Pop1990": 740, - "Pop1995": 860, - "Pop2000": 890, - "Pop2005": 910, - "Pop2010": 920, - "Pop2015": 940, - "Pop2020": 1020, - "Pop2025": 1100, - "Pop2050": 1193, - "Location": [ - 12.15, - -86.27 - ] - }, - { - "City": "Antwerpen", - "Country": "Belgium", - "Country_ISO3": "BEL", - "Pop1950": 760, - "Pop1955": 790, - "Pop1960": 810, - "Pop1965": 840, - "Pop1970": 860, - "Pop1975": 870, - "Pop1980": 880, - "Pop1985": 880, - "Pop1990": 890, - "Pop1995": 910, - "Pop2000": 910, - "Pop2005": 920, - "Pop2010": 920, - "Pop2015": 920, - "Pop2020": 920, - "Pop2025": 920, - "Pop2050": 920, - "Location": [ - 51.2, - 4.42 - ] - }, - { - "City": "Bruxelles-Brussel", - "Country": "Belgium", - "Country_ISO3": "BEL", - "Pop1950": 1420, - "Pop1955": 1450, - "Pop1960": 1480, - "Pop1965": 1520, - "Pop1970": 1570, - "Pop1975": 1610, - "Pop1980": 1650, - "Pop1985": 1650, - "Pop1990": 1680, - "Pop1995": 1720, - "Pop2000": 1730, - "Pop2005": 1740, - "Pop2010": 1740, - "Pop2015": 1740, - "Pop2020": 1740, - "Pop2025": 1740, - "Pop2050": 1744, - "Location": [ - 50.83, - 4.36 - ] - }, - { - "City": "Niamey", - "Country": "Niger", - "Country_ISO3": "NER", - "Pop1950": 20, - "Pop1955": 40, - "Pop1960": 60, - "Pop1965": 80, - "Pop1970": 130, - "Pop1975": 200, - "Pop1980": 270, - "Pop1985": 340, - "Pop1990": 430, - "Pop1995": 540, - "Pop2000": 680, - "Pop2005": 850, - "Pop2010": 920, - "Pop2015": 1030, - "Pop2020": 1260, - "Pop2025": 1580, - "Pop2050": 2028, - "Location": [ - 13.51, - 2.12 - ] - }, - { - "City": "Abuja", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 20, - "Pop1955": 20, - "Pop1960": 20, - "Pop1965": 30, - "Pop1970": 50, - "Pop1975": 80, - "Pop1980": 120, - "Pop1985": 200, - "Pop1990": 330, - "Pop1995": 530, - "Pop2000": 830, - "Pop2005": 1320, - "Pop2010": 1580, - "Pop2015": 1990, - "Pop2020": 2560, - "Pop2025": 2970, - "Pop2050": 3358, - "Location": [ - 9.05, - 7.25 - ] - }, - { - "City": "Benin City", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 50, - "Pop1955": 60, - "Pop1960": 80, - "Pop1965": 110, - "Pop1970": 160, - "Pop1975": 230, - "Pop1980": 340, - "Pop1985": 480, - "Pop1990": 690, - "Pop1995": 840, - "Pop2000": 980, - "Pop2005": 1120, - "Pop2010": 1190, - "Pop2015": 1300, - "Pop2020": 1520, - "Pop2025": 1760, - "Pop2050": 1991, - "Location": [ - 6.33, - 5.62 - ] - }, - { - "City": "Ibadan", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 420, - "Pop1955": 490, - "Pop1960": 570, - "Pop1965": 670, - "Pop1970": 810, - "Pop1975": 980, - "Pop1980": 1190, - "Pop1985": 1440, - "Pop1990": 1740, - "Pop1995": 1990, - "Pop2000": 2240, - "Pop2005": 2510, - "Pop2010": 2630, - "Pop2015": 2840, - "Pop2020": 3270, - "Pop2025": 3750, - "Pop2050": 4234, - "Location": [ - 7.37, - 3.89 - ] - }, - { - "City": "Ilorin", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 180, - "Pop1965": 220, - "Pop1970": 270, - "Pop1975": 320, - "Pop1980": 390, - "Pop1985": 460, - "Pop1990": 520, - "Pop1995": 580, - "Pop2000": 650, - "Pop2005": 740, - "Pop2010": 770, - "Pop2015": 840, - "Pop2020": 970, - "Pop2025": 1120, - "Pop2050": 1277, - "Location": [ - 8.49, - 4.54 - ] - }, - { - "City": "Kaduna", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 30, - "Pop1955": 50, - "Pop1960": 100, - "Pop1965": 170, - "Pop1970": 270, - "Pop1975": 410, - "Pop1980": 630, - "Pop1985": 850, - "Pop1990": 960, - "Pop1995": 1080, - "Pop2000": 1220, - "Pop2005": 1380, - "Pop2010": 1440, - "Pop2015": 1560, - "Pop2020": 1810, - "Pop2025": 2080, - "Pop2050": 2360, - "Location": [ - 10.51, - 7.44 - ] - }, - { - "City": "Kano", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 120, - "Pop1955": 160, - "Pop1960": 230, - "Pop1965": 340, - "Pop1970": 540, - "Pop1975": 860, - "Pop1980": 1350, - "Pop1985": 1860, - "Pop1990": 2100, - "Pop1995": 2360, - "Pop2000": 2660, - "Pop2005": 2990, - "Pop2010": 3140, - "Pop2015": 3390, - "Pop2020": 3910, - "Pop2025": 4490, - "Pop2050": 5056, - "Location": [ - 11.99, - 8.49 - ] - }, - { - "City": "Lagos", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 300, - "Pop1955": 470, - "Pop1960": 760, - "Pop1965": 1140, - "Pop1970": 1410, - "Pop1975": 1890, - "Pop1980": 2570, - "Pop1985": 3500, - "Pop1990": 4760, - "Pop1995": 5970, - "Pop2000": 7230, - "Pop2005": 8770, - "Pop2010": 9470, - "Pop2015": 10570, - "Pop2020": 12400, - "Pop2025": 14130, - "Pop2050": 15796, - "Location": [ - 6.45, - 3.3 - ] - }, - { - "City": "Maiduguri", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 50, - "Pop1955": 70, - "Pop1960": 100, - "Pop1965": 160, - "Pop1970": 220, - "Pop1975": 300, - "Pop1980": 420, - "Pop1985": 530, - "Pop1990": 600, - "Pop1995": 670, - "Pop2000": 760, - "Pop2005": 850, - "Pop2010": 900, - "Pop2015": 970, - "Pop2020": 1120, - "Pop2025": 1300, - "Pop2050": 1479, - "Location": [ - 11.85, - 13.16 - ] - }, - { - "City": "Ogbomosho", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 120, - "Pop1955": 170, - "Pop1960": 250, - "Pop1965": 330, - "Pop1970": 380, - "Pop1975": 430, - "Pop1980": 480, - "Pop1985": 550, - "Pop1990": 620, - "Pop1995": 700, - "Pop2000": 800, - "Pop2005": 900, - "Pop2010": 950, - "Pop2015": 1030, - "Pop2020": 1200, - "Pop2025": 1390, - "Pop2050": 1575, - "Location": [ - 8.13, - 4.25 - ] - }, - { - "City": "Port Harcourt", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 60, - "Pop1955": 90, - "Pop1960": 140, - "Pop1965": 200, - "Pop1970": 270, - "Pop1975": 360, - "Pop1980": 480, - "Pop1985": 600, - "Pop1990": 680, - "Pop1995": 770, - "Pop2000": 860, - "Pop2005": 970, - "Pop2010": 1020, - "Pop2015": 1100, - "Pop2020": 1280, - "Pop2025": 1480, - "Pop2050": 1680, - "Location": [ - 4.78, - 7 - ] - }, - { - "City": "Zaria", - "Country": "Nigeria", - "Country_ISO3": "NGA", - "Pop1950": 50, - "Pop1955": 70, - "Pop1960": 120, - "Pop1965": 180, - "Pop1970": 240, - "Pop1975": 320, - "Pop1980": 420, - "Pop1985": 520, - "Pop1990": 590, - "Pop1995": 670, - "Pop2000": 750, - "Pop2005": 850, - "Pop2010": 890, - "Pop2015": 960, - "Pop2020": 1120, - "Pop2025": 1290, - "Pop2050": 1470, - "Location": [ - 11.06, - 7.7 - ] - }, - { - "City": "Oslo", - "Country": "Norway", - "Country_ISO3": "NOR", - "Pop1950": 470, - "Pop1955": 530, - "Pop1960": 580, - "Pop1965": 610, - "Pop1970": 640, - "Pop1975": 640, - "Pop1980": 640, - "Pop1985": 660, - "Pop1990": 680, - "Pop1995": 730, - "Pop2000": 770, - "Pop2005": 820, - "Pop2010": 840, - "Pop2015": 860, - "Pop2020": 880, - "Pop2025": 910, - "Pop2050": 936, - "Location": [ - 59.93, - 10.71 - ] - }, - { - "City": "Faisalabad", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 170, - "Pop1955": 260, - "Pop1960": 400, - "Pop1965": 550, - "Pop1970": 730, - "Pop1975": 910, - "Pop1980": 1080, - "Pop1985": 1280, - "Pop1990": 1520, - "Pop1995": 1800, - "Pop2000": 2140, - "Pop2005": 2480, - "Pop2010": 2620, - "Pop2015": 2830, - "Pop2020": 3260, - "Pop2025": 3760, - "Pop2050": 4283, - "Location": [ - 31.4, - 73.08 - ] - }, - { - "City": "Gujranwala", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 120, - "Pop1955": 150, - "Pop1960": 190, - "Pop1965": 250, - "Pop1970": 320, - "Pop1975": 430, - "Pop1980": 580, - "Pop1985": 700, - "Pop1990": 850, - "Pop1995": 1020, - "Pop2000": 1220, - "Pop2005": 1430, - "Pop2010": 1510, - "Pop2015": 1640, - "Pop2020": 1900, - "Pop2025": 2200, - "Pop2050": 2513, - "Location": [ - 32.15, - 74.18 - ] - }, - { - "City": "Hyderabad", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 230, - "Pop1955": 310, - "Pop1960": 420, - "Pop1965": 500, - "Pop1970": 590, - "Pop1975": 670, - "Pop1980": 740, - "Pop1985": 840, - "Pop1990": 950, - "Pop1995": 1080, - "Pop2000": 1220, - "Pop2005": 1390, - "Pop2010": 1460, - "Pop2015": 1580, - "Pop2020": 1830, - "Pop2025": 2110, - "Pop2050": 2420, - "Location": [ - 25.38, - 68.36 - ] - }, - { - "City": "Islamabad", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 40, - "Pop1955": 40, - "Pop1960": 40, - "Pop1965": 60, - "Pop1970": 70, - "Pop1975": 110, - "Pop1980": 190, - "Pop1985": 260, - "Pop1990": 340, - "Pop1995": 450, - "Pop2000": 590, - "Pop2005": 730, - "Pop2010": 780, - "Pop2015": 850, - "Pop2020": 990, - "Pop2025": 1150, - "Pop2050": 1320, - "Location": [ - 33.71, - 73.06 - ] - }, - { - "City": "Karachi", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 1060, - "Pop1955": 1420, - "Pop1960": 1850, - "Pop1965": 2400, - "Pop1970": 3120, - "Pop1975": 3990, - "Pop1980": 5050, - "Pop1985": 6030, - "Pop1990": 7150, - "Pop1995": 8470, - "Pop2000": 10020, - "Pop2005": 11550, - "Pop2010": 12130, - "Pop2015": 13050, - "Pop2020": 14860, - "Pop2025": 16920, - "Pop2050": 19095, - "Location": [ - 24.89, - 67.02 - ] - }, - { - "City": "Lahore", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 840, - "Pop1955": 1020, - "Pop1960": 1260, - "Pop1965": 1580, - "Pop1970": 1960, - "Pop1975": 2400, - "Pop1980": 2880, - "Pop1985": 3390, - "Pop1990": 3970, - "Pop1995": 4650, - "Pop2000": 5450, - "Pop2005": 6260, - "Pop2010": 6580, - "Pop2015": 7090, - "Pop2020": 8110, - "Pop2025": 9280, - "Pop2050": 10512, - "Location": [ - 31.54, - 74.34 - ] - }, - { - "City": "Multan", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 190, - "Pop1955": 250, - "Pop1960": 340, - "Pop1965": 420, - "Pop1970": 500, - "Pop1975": 600, - "Pop1980": 720, - "Pop1985": 830, - "Pop1990": 950, - "Pop1995": 1100, - "Pop2000": 1260, - "Pop2005": 1440, - "Pop2010": 1520, - "Pop2015": 1650, - "Pop2020": 1910, - "Pop2025": 2200, - "Pop2050": 2523, - "Location": [ - 30.2, - 71.41 - ] - }, - { - "City": "Peshawar", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 150, - "Pop1955": 180, - "Pop1960": 210, - "Pop1965": 240, - "Pop1970": 260, - "Pop1975": 350, - "Pop1980": 540, - "Pop1985": 650, - "Pop1990": 770, - "Pop1995": 900, - "Pop2000": 1070, - "Pop2005": 1240, - "Pop2010": 1300, - "Pop2015": 1420, - "Pop2020": 1640, - "Pop2025": 1890, - "Pop2050": 2170, - "Location": [ - 34, - 71.54 - ] - }, - { - "City": "Quetta", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 80, - "Pop1955": 90, - "Pop1960": 100, - "Pop1965": 120, - "Pop1970": 140, - "Pop1975": 190, - "Pop1980": 270, - "Pop1985": 340, - "Pop1990": 410, - "Pop1995": 500, - "Pop2000": 610, - "Pop2005": 720, - "Pop2010": 770, - "Pop2015": 840, - "Pop2020": 970, - "Pop2025": 1130, - "Pop2050": 1298, - "Location": [ - 30.2, - 67.01 - ] - }, - { - "City": "Rawalpindi", - "Country": "Pakistan", - "Country_ISO3": "PAK", - "Pop1950": 230, - "Pop1955": 280, - "Pop1960": 330, - "Pop1965": 430, - "Pop1970": 550, - "Pop1975": 670, - "Pop1980": 780, - "Pop1985": 920, - "Pop1990": 1090, - "Pop1995": 1290, - "Pop2000": 1520, - "Pop2005": 1760, - "Pop2010": 1860, - "Pop2015": 2020, - "Pop2020": 2320, - "Pop2025": 2680, - "Pop2050": 3067, - "Location": [ - 33.6, - 73.04 - ] - }, - { - "City": "Ciudad de Panamá (Panama City)", - "Country": "Panama", - "Country_ISO3": "PAN", - "Pop1950": 170, - "Pop1955": 220, - "Pop1960": 280, - "Pop1965": 360, - "Pop1970": 460, - "Pop1975": 530, - "Pop1980": 610, - "Pop1985": 720, - "Pop1990": 850, - "Pop1995": 950, - "Pop2000": 1070, - "Pop2005": 1220, - "Pop2010": 1280, - "Pop2015": 1380, - "Pop2020": 1530, - "Pop2025": 1650, - "Pop2050": 1759, - "Location": [ - 9, - -79.51 - ] - }, - { - "City": "Asunción", - "Country": "Paraguay", - "Country_ISO3": "PRY", - "Pop1950": 260, - "Pop1955": 310, - "Pop1960": 380, - "Pop1965": 460, - "Pop1970": 550, - "Pop1975": 650, - "Pop1980": 770, - "Pop1985": 910, - "Pop1990": 1090, - "Pop1995": 1290, - "Pop2000": 1510, - "Pop2005": 1760, - "Pop2010": 1870, - "Pop2015": 2030, - "Pop2020": 2280, - "Pop2025": 2510, - "Pop2050": 2715, - "Location": [ - -25.3, - -57.62 - ] - }, - { - "City": "Arequipa", - "Country": "Peru", - "Country_ISO3": "PER", - "Pop1950": 130, - "Pop1955": 140, - "Pop1960": 160, - "Pop1965": 210, - "Pop1970": 270, - "Pop1975": 350, - "Pop1980": 430, - "Pop1985": 500, - "Pop1990": 560, - "Pop1995": 640, - "Pop2000": 700, - "Pop2005": 780, - "Pop2010": 820, - "Pop2015": 860, - "Pop2020": 930, - "Pop2025": 980, - "Pop2050": 1038, - "Location": [ - -16.39, - -71.52 - ] - }, - { - "City": "Lima", - "Country": "Peru", - "Country_ISO3": "PER", - "Pop1950": 1070, - "Pop1955": 1370, - "Pop1960": 1760, - "Pop1965": 2280, - "Pop1970": 2980, - "Pop1975": 3700, - "Pop1980": 4440, - "Pop1985": 5120, - "Pop1990": 5840, - "Pop1995": 6540, - "Pop2000": 7120, - "Pop2005": 7750, - "Pop2010": 8010, - "Pop2015": 8380, - "Pop2020": 8860, - "Pop2025": 9250, - "Pop2050": 9600, - "Location": [ - -12.08, - -77.04 - ] - }, - { - "City": "Cebu", - "Country": "Philippines", - "Country_ISO3": "PHL", - "Pop1950": 180, - "Pop1955": 210, - "Pop1960": 250, - "Pop1965": 300, - "Pop1970": 350, - "Pop1975": 420, - "Pop1980": 490, - "Pop1985": 550, - "Pop1990": 610, - "Pop1995": 660, - "Pop2000": 720, - "Pop2005": 790, - "Pop2010": 820, - "Pop2015": 860, - "Pop2020": 960, - "Pop2025": 1060, - "Pop2050": 1153, - "Location": [ - 10.42, - 123.79 - ] - }, - { - "City": "Davao", - "Country": "Philippines", - "Country_ISO3": "PHL", - "Pop1950": 120, - "Pop1955": 170, - "Pop1960": 230, - "Pop1965": 300, - "Pop1970": 400, - "Pop1975": 490, - "Pop1980": 610, - "Pop1985": 720, - "Pop1990": 850, - "Pop1995": 1000, - "Pop2000": 1150, - "Pop2005": 1320, - "Pop2010": 1400, - "Pop2015": 1520, - "Pop2020": 1730, - "Pop2025": 1910, - "Pop2050": 2065, - "Location": [ - 7.08, - 125.61 - ] - }, - { - "City": "Manila", - "Country": "Philippines", - "Country_ISO3": "PHL", - "Pop1950": 1540, - "Pop1955": 1870, - "Pop1960": 2270, - "Pop1965": 2830, - "Pop1970": 3530, - "Pop1975": 5000, - "Pop1980": 5960, - "Pop1985": 6890, - "Pop1990": 7970, - "Pop1995": 9400, - "Pop2000": 9960, - "Pop2005": 10760, - "Pop2010": 11100, - "Pop2015": 11660, - "Pop2020": 12790, - "Pop2025": 13890, - "Pop2050": 14808, - "Location": [ - 14.61, - 120.96 - ] - }, - { - "City": "Zamboanga", - "Country": "Philippines", - "Country_ISO3": "PHL", - "Pop1950": 110, - "Pop1955": 120, - "Pop1960": 130, - "Pop1965": 160, - "Pop1970": 200, - "Pop1975": 210, - "Pop1980": 340, - "Pop1985": 390, - "Pop1990": 440, - "Pop1995": 510, - "Pop2000": 600, - "Pop2005": 720, - "Pop2010": 770, - "Pop2015": 860, - "Pop2020": 990, - "Pop2025": 1100, - "Pop2050": 1192, - "Location": [ - 6.9, - 122.06 - ] - }, - { - "City": "Kraków", - "Country": "Poland", - "Country_ISO3": "POL", - "Pop1950": 340, - "Pop1955": 400, - "Pop1960": 470, - "Pop1965": 520, - "Pop1970": 580, - "Pop1975": 640, - "Pop1980": 700, - "Pop1985": 720, - "Pop1990": 740, - "Pop1995": 750, - "Pop2000": 760, - "Pop2005": 760, - "Pop2010": 760, - "Pop2015": 760, - "Pop2020": 760, - "Pop2025": 760, - "Pop2050": 755, - "Location": [ - 50.06, - 19.94 - ] - }, - { - "City": "Lódz", - "Country": "Poland", - "Country_ISO3": "POL", - "Pop1950": 610, - "Pop1955": 660, - "Pop1960": 700, - "Pop1965": 730, - "Pop1970": 760, - "Pop1975": 800, - "Pop1980": 820, - "Pop1985": 830, - "Pop1990": 840, - "Pop1995": 820, - "Pop2000": 800, - "Pop2005": 770, - "Pop2010": 760, - "Pop2015": 740, - "Pop2020": 740, - "Pop2025": 740, - "Pop2050": 735, - "Location": [ - 51.77, - 19.47 - ] - }, - { - "City": "Warszawa", - "Country": "Poland", - "Country_ISO3": "POL", - "Pop1950": 770, - "Pop1955": 940, - "Pop1960": 1120, - "Pop1965": 1210, - "Pop1970": 1300, - "Pop1975": 1440, - "Pop1980": 1560, - "Pop1985": 1600, - "Pop1990": 1630, - "Pop1995": 1650, - "Pop2000": 1670, - "Pop2005": 1690, - "Pop2010": 1710, - "Pop2015": 1720, - "Pop2020": 1740, - "Pop2025": 1740, - "Pop2050": 1736, - "Location": [ - 52.24, - 21.01 - ] - }, - { - "City": "Lisboa", - "Country": "Portugal", - "Country_ISO3": "PRT", - "Pop1950": 1300, - "Pop1955": 1400, - "Pop1960": 1510, - "Pop1965": 1660, - "Pop1970": 1820, - "Pop1975": 2100, - "Pop1980": 2450, - "Pop1985": 2520, - "Pop1990": 2540, - "Pop1995": 2600, - "Pop2000": 2670, - "Pop2005": 2760, - "Pop2010": 2810, - "Pop2015": 2890, - "Pop2020": 3000, - "Pop2025": 3060, - "Pop2050": 3086, - "Location": [ - 38.72, - -9.12 - ] - }, - { - "City": "Porto", - "Country": "Portugal", - "Country_ISO3": "PRT", - "Pop1950": 730, - "Pop1955": 780, - "Pop1960": 840, - "Pop1965": 880, - "Pop1970": 920, - "Pop1975": 1010, - "Pop1980": 1100, - "Pop1985": 1140, - "Pop1990": 1160, - "Pop1995": 1210, - "Pop2000": 1250, - "Pop2005": 1310, - "Pop2010": 1340, - "Pop2015": 1380, - "Pop2020": 1440, - "Pop2025": 1480, - "Pop2050": 1497, - "Location": [ - 41.16, - -8.58 - ] - }, - { - "City": "San Juan", - "Country": "Puerto Rico", - "Country_ISO3": "PRI", - "Pop1950": 450, - "Pop1955": 520, - "Pop1960": 600, - "Pop1965": 740, - "Pop1970": 920, - "Pop1975": 1070, - "Pop1980": 1240, - "Pop1985": 1380, - "Pop1990": 1540, - "Pop1995": 1860, - "Pop2000": 2240, - "Pop2005": 2600, - "Pop2010": 2690, - "Pop2015": 2760, - "Pop2020": 2800, - "Pop2025": 2800, - "Pop2050": 2803, - "Location": [ - 18.8, - -71.22 - ] - }, - { - "City": "Bucuresti", - "Country": "Romania", - "Country_ISO3": "ROU", - "Pop1950": 650, - "Pop1955": 860, - "Pop1960": 1000, - "Pop1965": 1150, - "Pop1970": 1400, - "Pop1975": 1700, - "Pop1980": 1860, - "Pop1985": 1950, - "Pop1990": 2040, - "Pop1995": 2020, - "Pop2000": 1950, - "Pop2005": 1940, - "Pop2010": 1940, - "Pop2015": 1950, - "Pop2020": 1950, - "Pop2025": 1950, - "Pop2050": 1949, - "Location": [ - 44.43, - 26.12 - ] - }, - { - "City": "Chelyabinsk", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 570, - "Pop1955": 640, - "Pop1960": 710, - "Pop1965": 790, - "Pop1970": 880, - "Pop1975": 970, - "Pop1980": 1050, - "Pop1985": 1100, - "Pop1990": 1130, - "Pop1995": 1100, - "Pop2000": 1080, - "Pop2005": 1090, - "Pop2010": 1090, - "Pop2015": 1090, - "Pop2020": 1090, - "Pop2025": 1080, - "Pop2050": 1085, - "Location": [ - 55.14, - 61.39 - ] - }, - { - "City": "Kazan", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 510, - "Pop1955": 590, - "Pop1960": 670, - "Pop1965": 770, - "Pop1970": 880, - "Pop1975": 940, - "Pop1980": 1010, - "Pop1985": 1060, - "Pop1990": 1090, - "Pop1995": 1090, - "Pop2000": 1100, - "Pop2005": 1110, - "Pop2010": 1120, - "Pop2015": 1120, - "Pop2020": 1120, - "Pop2025": 1120, - "Pop2050": 1122, - "Location": [ - 55.73, - 49.14 - ] - }, - { - "City": "Krasnoyarsk", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 290, - "Pop1955": 360, - "Pop1960": 440, - "Pop1965": 540, - "Pop1970": 660, - "Pop1975": 730, - "Pop1980": 810, - "Pop1985": 870, - "Pop1990": 910, - "Pop1995": 910, - "Pop2000": 910, - "Pop2005": 920, - "Pop2010": 920, - "Pop2015": 930, - "Pop2020": 930, - "Pop2025": 940, - "Pop2050": 935, - "Location": [ - 56.01, - 92.83 - ] - }, - { - "City": "Moskva", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 5360, - "Pop1955": 5750, - "Pop1960": 6170, - "Pop1965": 6620, - "Pop1970": 7110, - "Pop1975": 7620, - "Pop1980": 8140, - "Pop1985": 8580, - "Pop1990": 8990, - "Pop1995": 9200, - "Pop2000": 10020, - "Pop2005": 10420, - "Pop2010": 10450, - "Pop2015": 10500, - "Pop2020": 10520, - "Pop2025": 10530, - "Pop2050": 10526, - "Location": [ - 55.74, - 37.7 - ] - }, - { - "City": "Nizhniy Novgorod", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 800, - "Pop1955": 880, - "Pop1960": 970, - "Pop1965": 1070, - "Pop1970": 1180, - "Pop1975": 1270, - "Pop1980": 1360, - "Pop1985": 1400, - "Pop1990": 1420, - "Pop1995": 1380, - "Pop2000": 1330, - "Pop2005": 1290, - "Pop2010": 1280, - "Pop2015": 1270, - "Pop2020": 1260, - "Pop2025": 1260, - "Pop2050": 1262, - "Location": [ - 58.54, - 31.27 - ] - }, - { - "City": "Novosibirsk", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 720, - "Pop1955": 810, - "Pop1960": 920, - "Pop1965": 1040, - "Pop1970": 1170, - "Pop1975": 1250, - "Pop1980": 1330, - "Pop1985": 1390, - "Pop1990": 1430, - "Pop1995": 1430, - "Pop2000": 1430, - "Pop2005": 1400, - "Pop2010": 1390, - "Pop2015": 1380, - "Pop2020": 1370, - "Pop2025": 1370, - "Pop2050": 1366, - "Location": [ - 55.03, - 82.94 - ] - }, - { - "City": "Omsk", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 440, - "Pop1955": 520, - "Pop1960": 610, - "Pop1965": 710, - "Pop1970": 830, - "Pop1975": 930, - "Pop1980": 1030, - "Pop1985": 1100, - "Pop1990": 1140, - "Pop1995": 1140, - "Pop2000": 1140, - "Pop2005": 1140, - "Pop2010": 1140, - "Pop2015": 1130, - "Pop2020": 1120, - "Pop2025": 1120, - "Pop2050": 1125, - "Location": [ - 55.06, - 73.25 - ] - }, - { - "City": "Perm", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 500, - "Pop1955": 570, - "Pop1960": 660, - "Pop1965": 750, - "Pop1970": 860, - "Pop1975": 940, - "Pop1980": 1010, - "Pop1985": 1050, - "Pop1990": 1080, - "Pop1995": 1040, - "Pop2000": 1010, - "Pop2005": 990, - "Pop2010": 1000, - "Pop2015": 1000, - "Pop2020": 1010, - "Pop2025": 1010, - "Pop2050": 1007, - "Location": [ - 58, - 56.23 - ] - }, - { - "City": "Rostov-na-Donu", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 480, - "Pop1955": 550, - "Pop1960": 620, - "Pop1965": 700, - "Pop1970": 800, - "Pop1975": 870, - "Pop1980": 950, - "Pop1985": 990, - "Pop1990": 1020, - "Pop1995": 1040, - "Pop2000": 1060, - "Pop2005": 1060, - "Pop2010": 1050, - "Pop2015": 1050, - "Pop2020": 1040, - "Pop2025": 1040, - "Pop2050": 1044, - "Location": [ - 47.23, - 39.68 - ] - }, - { - "City": "Samara", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 660, - "Pop1955": 740, - "Pop1960": 840, - "Pop1965": 940, - "Pop1970": 1060, - "Pop1975": 1150, - "Pop1980": 1220, - "Pop1985": 1240, - "Pop1990": 1240, - "Pop1995": 1210, - "Pop2000": 1170, - "Pop2005": 1150, - "Pop2010": 1140, - "Pop2015": 1130, - "Pop2020": 1120, - "Pop2025": 1120, - "Pop2050": 1119, - "Location": [ - 53.23, - 50.16 - ] - }, - { - "City": "Sankt Peterburg", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 2900, - "Pop1955": 3140, - "Pop1960": 3400, - "Pop1965": 3680, - "Pop1970": 3980, - "Pop1975": 4320, - "Pop1980": 4640, - "Pop1985": 4840, - "Pop1990": 4990, - "Pop1995": 4840, - "Pop2000": 4730, - "Pop2005": 4590, - "Pop2010": 4550, - "Pop2015": 4510, - "Pop2020": 4480, - "Pop2025": 4480, - "Pop2050": 4476, - "Location": [ - 59.91, - 30.24 - ] - }, - { - "City": "Saratov", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 470, - "Pop1955": 530, - "Pop1960": 600, - "Pop1965": 680, - "Pop1970": 760, - "Pop1975": 820, - "Pop1980": 860, - "Pop1985": 890, - "Pop1990": 900, - "Pop1995": 890, - "Pop2000": 880, - "Pop2005": 850, - "Pop2010": 840, - "Pop2015": 830, - "Pop2020": 820, - "Pop2025": 820, - "Pop2050": 822, - "Location": [ - 51.49, - 45.95 - ] - }, - { - "City": "Ufa", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 420, - "Pop1955": 490, - "Pop1960": 570, - "Pop1965": 670, - "Pop1970": 780, - "Pop1975": 890, - "Pop1980": 980, - "Pop1985": 1040, - "Pop1990": 1080, - "Pop1995": 1060, - "Pop2000": 1050, - "Pop2005": 1030, - "Pop2010": 1020, - "Pop2015": 1000, - "Pop2020": 990, - "Pop2025": 990, - "Pop2050": 986, - "Location": [ - 54.82, - 56.09 - ] - }, - { - "City": "Volgograd", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 460, - "Pop1955": 530, - "Pop1960": 620, - "Pop1965": 720, - "Pop1970": 820, - "Pop1975": 880, - "Pop1980": 940, - "Pop1985": 970, - "Pop1990": 1000, - "Pop1995": 1000, - "Pop2000": 1010, - "Pop2005": 990, - "Pop2010": 980, - "Pop2015": 970, - "Pop2020": 970, - "Pop2025": 960, - "Pop2050": 965, - "Location": [ - 48.7, - 44.48 - ] - }, - { - "City": "Voronezh", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 330, - "Pop1955": 400, - "Pop1960": 470, - "Pop1965": 560, - "Pop1970": 670, - "Pop1975": 730, - "Pop1980": 800, - "Pop1985": 850, - "Pop1990": 880, - "Pop1995": 870, - "Pop2000": 850, - "Pop2005": 850, - "Pop2010": 840, - "Pop2015": 840, - "Pop2020": 840, - "Pop2025": 840, - "Pop2050": 838, - "Location": [ - 51.71, - 39.26 - ] - }, - { - "City": "Yekaterinburg", - "Country": "Russian Federation", - "Country_ISO3": "RUS", - "Pop1950": 630, - "Pop1955": 710, - "Pop1960": 810, - "Pop1965": 920, - "Pop1970": 1040, - "Pop1975": 1140, - "Pop1980": 1230, - "Pop1985": 1300, - "Pop1990": 1350, - "Pop1995": 1330, - "Pop2000": 1300, - "Pop2005": 1310, - "Pop2010": 1310, - "Pop2015": 1320, - "Pop2020": 1320, - "Pop2025": 1320, - "Pop2050": 1324, - "Location": [ - 56.83, - 60.58 - ] - }, - { - "City": "Kigali", - "Country": "Rwanda", - "Country_ISO3": "RWA", - "Pop1950": 20, - "Pop1955": 20, - "Pop1960": 30, - "Pop1965": 40, - "Pop1970": 60, - "Pop1975": 90, - "Pop1980": 130, - "Pop1985": 170, - "Pop1990": 220, - "Pop1995": 290, - "Pop2000": 500, - "Pop2005": 780, - "Pop2010": 860, - "Pop2015": 950, - "Pop2020": 1150, - "Pop2025": 1410, - "Pop2050": 1715, - "Location": [ - -1.95, - 30.05 - ] - }, - { - "City": "La Paz", - "Country": "Bolivia", - "Country_ISO3": "BOL", - "Pop1950": 320, - "Pop1955": 370, - "Pop1960": 440, - "Pop1965": 510, - "Pop1970": 600, - "Pop1975": 700, - "Pop1980": 810, - "Pop1985": 930, - "Pop1990": 1060, - "Pop1995": 1270, - "Pop2000": 1390, - "Pop2005": 1530, - "Pop2010": 1590, - "Pop2015": 1690, - "Pop2020": 1860, - "Pop2025": 2030, - "Pop2050": 2178, - "Location": [ - -16.5, - -68.15 - ] - }, - { - "City": "Santa Cruz", - "Country": "Bolivia", - "Country_ISO3": "BOL", - "Pop1950": 40, - "Pop1955": 60, - "Pop1960": 80, - "Pop1965": 120, - "Pop1970": 170, - "Pop1975": 230, - "Pop1980": 320, - "Pop1985": 450, - "Pop1990": 620, - "Pop1995": 830, - "Pop2000": 1050, - "Pop2005": 1320, - "Pop2010": 1420, - "Pop2015": 1550, - "Pop2020": 1720, - "Pop2025": 1880, - "Pop2050": 2016, - "Location": [ - -17.78, - -63.19 - ] - }, - { - "City": "Ad-Dammam", - "Country": "Saudi Arabia", - "Country_ISO3": "SAU", - "Pop1950": 20, - "Pop1955": 30, - "Pop1960": 40, - "Pop1965": 50, - "Pop1970": 80, - "Pop1975": 140, - "Pop1980": 200, - "Pop1985": 280, - "Pop1990": 410, - "Pop1995": 530, - "Pop2000": 640, - "Pop2005": 770, - "Pop2010": 820, - "Pop2015": 900, - "Pop2020": 1020, - "Pop2025": 1120, - "Pop2050": 1212, - "Location": [ - 26.33, - 50.08 - ] - }, - { - "City": "Al-Madinah", - "Country": "Saudi Arabia", - "Country_ISO3": "SAU", - "Pop1950": 50, - "Pop1955": 50, - "Pop1960": 60, - "Pop1965": 80, - "Pop1970": 130, - "Pop1975": 210, - "Pop1980": 280, - "Pop1985": 390, - "Pop1990": 530, - "Pop1995": 670, - "Pop2000": 800, - "Pop2005": 940, - "Pop2010": 1010, - "Pop2015": 1100, - "Pop2020": 1240, - "Pop2025": 1360, - "Pop2050": 1474, - "Location": [ - 24.42, - 39.69 - ] - }, - { - "City": "Ar-Riyadh", - "Country": "Saudi Arabia", - "Country_ISO3": "SAU", - "Pop1950": 110, - "Pop1955": 130, - "Pop1960": 160, - "Pop1965": 230, - "Pop1970": 410, - "Pop1975": 710, - "Pop1980": 1060, - "Pop1985": 1570, - "Pop1990": 2320, - "Pop1995": 3040, - "Pop2000": 3570, - "Pop2005": 4190, - "Pop2010": 4460, - "Pop2015": 4860, - "Pop2020": 5400, - "Pop2025": 5870, - "Pop2050": 6275, - "Location": [ - 24.65, - 46.77 - ] - }, - { - "City": "Jiddah", - "Country": "Saudi Arabia", - "Country_ISO3": "SAU", - "Pop1950": 120, - "Pop1955": 130, - "Pop1960": 140, - "Pop1965": 200, - "Pop1970": 350, - "Pop1975": 590, - "Pop1980": 850, - "Pop1985": 1220, - "Pop1990": 1740, - "Pop1995": 2200, - "Pop2000": 2510, - "Pop2005": 2860, - "Pop2010": 3010, - "Pop2015": 3240, - "Pop2020": 3590, - "Pop2025": 3910, - "Pop2050": 4190, - "Location": [ - 21.54, - 39.17 - ] - }, - { - "City": "Makkah", - "Country": "Saudi Arabia", - "Country_ISO3": "SAU", - "Pop1950": 150, - "Pop1955": 150, - "Pop1960": 160, - "Pop1965": 190, - "Pop1970": 270, - "Pop1975": 380, - "Pop1980": 500, - "Pop1985": 660, - "Pop1990": 860, - "Pop1995": 1030, - "Pop2000": 1170, - "Pop2005": 1320, - "Pop2010": 1380, - "Pop2015": 1490, - "Pop2020": 1650, - "Pop2025": 1810, - "Pop2050": 1948, - "Location": [ - 21.42, - 39.81 - ] - }, - { - "City": "Dakar", - "Country": "Senegal", - "Country_ISO3": "SEN", - "Pop1950": 210, - "Pop1955": 240, - "Pop1960": 360, - "Pop1965": 470, - "Pop1970": 610, - "Pop1975": 780, - "Pop1980": 960, - "Pop1985": 1160, - "Pop1990": 1400, - "Pop1995": 1690, - "Pop2000": 2030, - "Pop2005": 2430, - "Pop2010": 2600, - "Pop2015": 2860, - "Pop2020": 3280, - "Pop2025": 3730, - "Pop2050": 4225, - "Location": [ - 14.68, - -17.45 - ] - }, - { - "City": "Beograd", - "Country": "Serbia", - "Country_ISO3": "SRB", - "Pop1950": 410, - "Pop1955": 500, - "Pop1960": 580, - "Pop1965": 650, - "Pop1970": 730, - "Pop1975": 870, - "Pop1980": 1060, - "Pop1985": 1120, - "Pop1990": 1160, - "Pop1995": 1150, - "Pop2000": 1130, - "Pop2005": 1110, - "Pop2010": 1100, - "Pop2015": 1100, - "Pop2020": 1110, - "Pop2025": 1130, - "Pop2050": 1163, - "Location": [ - 44.79, - 20.41 - ] - }, - { - "City": "Freetown", - "Country": "Sierra Leone", - "Country_ISO3": "SLE", - "Pop1950": 90, - "Pop1955": 100, - "Pop1960": 120, - "Pop1965": 150, - "Pop1970": 210, - "Pop1975": 280, - "Pop1980": 360, - "Pop1985": 460, - "Pop1990": 530, - "Pop1995": 600, - "Pop2000": 690, - "Pop2005": 780, - "Pop2010": 830, - "Pop2015": 890, - "Pop2020": 1030, - "Pop2025": 1200, - "Pop2050": 1406, - "Location": [ - 8.48, - -13.23 - ] - }, - { - "City": "Singapore", - "Country": "Singapore", - "Country_ISO3": "SGP", - "Pop1950": 1020, - "Pop1955": 1310, - "Pop1960": 1630, - "Pop1965": 1880, - "Pop1970": 2080, - "Pop1975": 2260, - "Pop1980": 2420, - "Pop1985": 2710, - "Pop1990": 3020, - "Pop1995": 3480, - "Pop2000": 4020, - "Pop2005": 4330, - "Pop2010": 4440, - "Pop2015": 4590, - "Pop2020": 4810, - "Pop2025": 4960, - "Pop2050": 5104, - "Location": [ - 1.26, - 103.83 - ] - }, - { - "City": "Hà Noi", - "Country": "Viet Nam", - "Country_ISO3": "VNM", - "Pop1950": 280, - "Pop1955": 420, - "Pop1960": 640, - "Pop1965": 920, - "Pop1970": 1310, - "Pop1975": 1880, - "Pop1980": 2610, - "Pop1985": 2850, - "Pop1990": 3130, - "Pop1995": 3420, - "Pop2000": 3750, - "Pop2005": 4170, - "Pop2010": 4380, - "Pop2015": 4720, - "Pop2020": 5360, - "Pop2025": 6040, - "Pop2050": 6754, - "Location": [ - 21.03, - 105.82 - ] - }, - { - "City": "Hai Phòng", - "Country": "Viet Nam", - "Country_ISO3": "VNM", - "Pop1950": 170, - "Pop1955": 250, - "Pop1960": 370, - "Pop1965": 510, - "Pop1970": 700, - "Pop1975": 970, - "Pop1980": 1290, - "Pop1985": 1380, - "Pop1990": 1470, - "Pop1995": 1580, - "Pop2000": 1700, - "Pop2005": 1880, - "Pop2010": 1970, - "Pop2015": 2130, - "Pop2020": 2430, - "Pop2025": 2750, - "Pop2050": 3096, - "Location": [ - 20.86, - 106.67 - ] - }, - { - "City": "Thành Pho Ho Chí Minh", - "Country": "Viet Nam", - "Country_ISO3": "VNM", - "Pop1950": 1210, - "Pop1955": 1300, - "Pop1960": 1400, - "Pop1965": 1760, - "Pop1970": 2230, - "Pop1975": 2810, - "Pop1980": 3460, - "Pop1985": 3720, - "Pop1990": 4000, - "Pop1995": 4300, - "Pop2000": 4620, - "Pop2005": 5070, - "Pop2010": 5310, - "Pop2015": 5720, - "Pop2020": 6480, - "Pop2025": 7290, - "Pop2050": 8149, - "Location": [ - 10.75, - 106.66 - ] - }, - { - "City": "Muqdisho", - "Country": "Somalia", - "Country_ISO3": "SOM", - "Pop1950": 70, - "Pop1955": 70, - "Pop1960": 90, - "Pop1965": 150, - "Pop1970": 270, - "Pop1975": 440, - "Pop1980": 550, - "Pop1985": 750, - "Pop1990": 1040, - "Pop1995": 1150, - "Pop2000": 1200, - "Pop2005": 1420, - "Pop2010": 1100, - "Pop2015": 1500, - "Pop2020": 1790, - "Pop2025": 2140, - "Pop2050": 2529, - "Location": [ - 2.04, - 45.34 - ] - }, - { - "City": "Cape Town", - "Country": "South Africa", - "Country_ISO3": "ZAF", - "Pop1950": 620, - "Pop1955": 700, - "Pop1960": 800, - "Pop1965": 940, - "Pop1970": 1110, - "Pop1975": 1340, - "Pop1980": 1610, - "Pop1985": 1920, - "Pop1990": 2160, - "Pop1995": 2390, - "Pop2000": 2720, - "Pop2005": 3090, - "Pop2010": 3220, - "Pop2015": 3360, - "Pop2020": 3500, - "Pop2025": 3630, - "Pop2050": 3744, - "Location": [ - -33.97, - 18.48 - ] - }, - { - "City": "Durban", - "Country": "South Africa", - "Country_ISO3": "ZAF", - "Pop1950": 480, - "Pop1955": 570, - "Pop1960": 680, - "Pop1965": 760, - "Pop1970": 860, - "Pop1975": 1020, - "Pop1980": 1210, - "Pop1985": 1450, - "Pop1990": 1720, - "Pop1995": 2080, - "Pop2000": 2370, - "Pop2005": 2640, - "Pop2010": 2730, - "Pop2015": 2840, - "Pop2020": 2960, - "Pop2025": 3070, - "Pop2050": 3173, - "Location": [ - -29.83, - 30.94 - ] - }, - { - "City": "Ekurhuleni", - "Country": "South Africa", - "Country_ISO3": "ZAF", - "Pop1950": 550, - "Pop1955": 610, - "Pop1960": 680, - "Pop1965": 780, - "Pop1970": 900, - "Pop1975": 1000, - "Pop1980": 1110, - "Pop1985": 1240, - "Pop1990": 1530, - "Pop1995": 1890, - "Pop2000": 2330, - "Pop2005": 2820, - "Pop2010": 2990, - "Pop2015": 3160, - "Pop2020": 3310, - "Pop2025": 3430, - "Pop2050": 3539, - "Location": [ - -26.17, - 28.22 - ] - }, - { - "City": "Johannesburg", - "Country": "South Africa", - "Country_ISO3": "ZAF", - "Pop1950": 900, - "Pop1955": 1020, - "Pop1960": 1150, - "Pop1965": 1290, - "Pop1970": 1440, - "Pop1975": 1550, - "Pop1980": 1660, - "Pop1985": 1770, - "Pop1990": 1900, - "Pop1995": 2260, - "Pop2000": 2730, - "Pop2005": 3260, - "Pop2010": 3440, - "Pop2015": 3620, - "Pop2020": 3780, - "Pop2025": 3920, - "Pop2050": 4041, - "Location": [ - -26.17, - 28 - ] - }, - { - "City": "Port Elizabeth", - "Country": "South Africa", - "Country_ISO3": "ZAF", - "Pop1950": 190, - "Pop1955": 240, - "Pop1960": 290, - "Pop1965": 370, - "Pop1970": 480, - "Pop1975": 530, - "Pop1980": 590, - "Pop1985": 660, - "Pop1990": 830, - "Pop1995": 910, - "Pop2000": 960, - "Pop2005": 1000, - "Pop2010": 1020, - "Pop2015": 1050, - "Pop2020": 1100, - "Pop2025": 1150, - "Pop2050": 1197, - "Location": [ - -33.88, - 25.48 - ] - }, - { - "City": "Pretoria", - "Country": "South Africa", - "Country_ISO3": "ZAF", - "Pop1950": 280, - "Pop1955": 340, - "Pop1960": 420, - "Pop1965": 490, - "Pop1970": 560, - "Pop1975": 620, - "Pop1980": 690, - "Pop1985": 760, - "Pop1990": 910, - "Pop1995": 950, - "Pop2000": 1080, - "Pop2005": 1270, - "Pop2010": 1340, - "Pop2015": 1410, - "Pop2020": 1480, - "Pop2025": 1540, - "Pop2050": 1604, - "Location": [ - -25.73, - 28.21 - ] - }, - { - "City": "Vereeniging", - "Country": "South Africa", - "Country_ISO3": "ZAF", - "Pop1950": 120, - "Pop1955": 150, - "Pop1960": 190, - "Pop1965": 240, - "Pop1970": 310, - "Pop1975": 370, - "Pop1980": 450, - "Pop1985": 550, - "Pop1990": 740, - "Pop1995": 800, - "Pop2000": 900, - "Pop2005": 1030, - "Pop2010": 1070, - "Pop2015": 1130, - "Pop2020": 1180, - "Pop2025": 1240, - "Pop2050": 1286, - "Location": [ - -26.67, - 27.93 - ] - }, - { - "City": "Harare", - "Country": "Zimbabwe", - "Country_ISO3": "ZWE", - "Pop1950": 140, - "Pop1955": 190, - "Pop1960": 250, - "Pop1965": 320, - "Pop1970": 420, - "Pop1975": 530, - "Pop1980": 620, - "Pop1985": 780, - "Pop1990": 1050, - "Pop1995": 1260, - "Pop2000": 1380, - "Pop2005": 1520, - "Pop2010": 1570, - "Pop2015": 1660, - "Pop2020": 1840, - "Pop2025": 2040, - "Pop2050": 2247, - "Location": [ - -17.82, - 31.02 - ] - }, - { - "City": "Barcelona", - "Country": "Spain", - "Country_ISO3": "ESP", - "Pop1950": 1810, - "Pop1955": 2100, - "Pop1960": 2470, - "Pop1965": 2930, - "Pop1970": 3480, - "Pop1975": 3680, - "Pop1980": 3840, - "Pop1985": 3970, - "Pop1990": 4100, - "Pop1995": 4320, - "Pop2000": 4560, - "Pop2005": 4820, - "Pop2010": 4920, - "Pop2015": 5060, - "Pop2020": 5170, - "Pop2025": 5180, - "Pop2050": 5183, - "Location": [ - 41.38, - 2.18 - ] - }, - { - "City": "Madrid", - "Country": "Spain", - "Country_ISO3": "ESP", - "Pop1950": 1700, - "Pop1955": 2020, - "Pop1960": 2390, - "Pop1965": 2900, - "Pop1970": 3520, - "Pop1975": 3890, - "Pop1980": 4250, - "Pop1985": 4360, - "Pop1990": 4410, - "Pop1995": 4700, - "Pop2000": 5040, - "Pop2005": 5410, - "Pop2010": 5570, - "Pop2015": 5760, - "Pop2020": 5920, - "Pop2025": 5930, - "Pop2050": 5935, - "Location": [ - 40.44, - -3.69 - ] - }, - { - "City": "Valencia", - "Country": "Spain", - "Country_ISO3": "ESP", - "Pop1950": 510, - "Pop1955": 510, - "Pop1960": 500, - "Pop1965": 570, - "Pop1970": 640, - "Pop1975": 700, - "Pop1980": 740, - "Pop1985": 760, - "Pop1990": 780, - "Pop1995": 780, - "Pop2000": 800, - "Pop2005": 800, - "Pop2010": 810, - "Pop2015": 820, - "Pop2020": 830, - "Pop2025": 840, - "Pop2050": 847, - "Location": [ - 39.47, - -0.36 - ] - }, - { - "City": "Al-Khartum", - "Country": "Sudan", - "Country_ISO3": "SDN", - "Pop1950": 180, - "Pop1955": 250, - "Pop1960": 350, - "Pop1965": 480, - "Pop1970": 660, - "Pop1975": 890, - "Pop1980": 1160, - "Pop1985": 1610, - "Pop1990": 2360, - "Pop1995": 3240, - "Pop2000": 3950, - "Pop2005": 4520, - "Pop2010": 4750, - "Pop2015": 5180, - "Pop2020": 6080, - "Pop2025": 7020, - "Pop2050": 7937, - "Location": [ - 15.55, - 32.52 - ] - }, - { - "City": "Stockholm", - "Country": "Sweden", - "Country_ISO3": "SWE", - "Pop1950": 740, - "Pop1955": 770, - "Pop1960": 800, - "Pop1965": 1000, - "Pop1970": 1040, - "Pop1975": 1020, - "Pop1980": 990, - "Pop1985": 1010, - "Pop1990": 1040, - "Pop1995": 1140, - "Pop2000": 1210, - "Pop2005": 1250, - "Pop2010": 1260, - "Pop2015": 1280, - "Pop2020": 1310, - "Pop2025": 1330, - "Pop2050": 1343, - "Location": [ - 59.33, - 17.99 - ] - }, - { - "City": "Zürich", - "Country": "Switzerland", - "Country_ISO3": "CHE", - "Pop1950": 490, - "Pop1955": 510, - "Pop1960": 540, - "Pop1965": 610, - "Pop1970": 710, - "Pop1975": 710, - "Pop1980": 710, - "Pop1985": 840, - "Pop1990": 1010, - "Pop1995": 1050, - "Pop2000": 1080, - "Pop2005": 1100, - "Pop2010": 1110, - "Pop2015": 1120, - "Pop2020": 1130, - "Pop2025": 1150, - "Pop2050": 1172, - "Location": [ - 47.4, - 8.53 - ] - }, - { - "City": "Baixada Santista", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 250, - "Pop1955": 310, - "Pop1960": 400, - "Pop1965": 500, - "Pop1970": 620, - "Pop1975": 770, - "Pop1980": 950, - "Pop1985": 1060, - "Pop1990": 1180, - "Pop1995": 1320, - "Pop2000": 1470, - "Pop2005": 1640, - "Pop2010": 1710, - "Pop2015": 1810, - "Pop2020": 1940, - "Pop2025": 2030, - "Pop2050": 2095, - "Location": [ - -23.95, - -46.36 - ] - }, - { - "City": "Belém", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 240, - "Pop1955": 300, - "Pop1960": 380, - "Pop1965": 480, - "Pop1970": 600, - "Pop1975": 710, - "Pop1980": 830, - "Pop1985": 970, - "Pop1990": 1130, - "Pop1995": 1390, - "Pop2000": 1750, - "Pop2005": 2040, - "Pop2010": 2170, - "Pop2015": 2340, - "Pop2020": 2520, - "Pop2025": 2640, - "Pop2050": 2717, - "Location": [ - -1.43, - -48.49 - ] - }, - { - "City": "Belo Horizonte", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 410, - "Pop1955": 570, - "Pop1960": 780, - "Pop1965": 1080, - "Pop1970": 1480, - "Pop1975": 1910, - "Pop1980": 2440, - "Pop1985": 2950, - "Pop1990": 3550, - "Pop1995": 4090, - "Pop2000": 4660, - "Pop2005": 5300, - "Pop2010": 5580, - "Pop2015": 5940, - "Pop2020": 6360, - "Pop2025": 6600, - "Pop2050": 6748, - "Location": [ - -19.85, - -43.9 - ] - }, - { - "City": "Brasília", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 40, - "Pop1955": 70, - "Pop1960": 140, - "Pop1965": 270, - "Pop1970": 520, - "Pop1975": 830, - "Pop1980": 1290, - "Pop1985": 1560, - "Pop1990": 1860, - "Pop1995": 2260, - "Pop2000": 2750, - "Pop2005": 3340, - "Pop2010": 3600, - "Pop2015": 3940, - "Pop2020": 4280, - "Pop2025": 4460, - "Pop2050": 4578, - "Location": [ - -15.79, - -47.89 - ] - }, - { - "City": "Campinas", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 150, - "Pop1955": 210, - "Pop1960": 290, - "Pop1965": 400, - "Pop1970": 540, - "Pop1975": 770, - "Pop1980": 1110, - "Pop1985": 1370, - "Pop1990": 1690, - "Pop1995": 1980, - "Pop2000": 2260, - "Pop2005": 2630, - "Pop2010": 2790, - "Pop2015": 3000, - "Pop2020": 3240, - "Pop2025": 3380, - "Pop2050": 3474, - "Location": [ - -22.9, - -47.05 - ] - }, - { - "City": "Campo Grande", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 30, - "Pop1955": 40, - "Pop1960": 60, - "Pop1965": 90, - "Pop1970": 130, - "Pop1975": 190, - "Pop1980": 280, - "Pop1985": 370, - "Pop1990": 490, - "Pop1995": 570, - "Pop2000": 650, - "Pop2005": 740, - "Pop2010": 780, - "Pop2015": 830, - "Pop2020": 900, - "Pop2025": 940, - "Pop2050": 978, - "Location": [ - -20.45, - -54.61 - ] - }, - { - "City": "Cuiabá", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 30, - "Pop1955": 40, - "Pop1960": 50, - "Pop1965": 70, - "Pop1970": 100, - "Pop1975": 160, - "Pop1980": 260, - "Pop1985": 370, - "Pop1990": 510, - "Pop1995": 610, - "Pop2000": 690, - "Pop2005": 770, - "Pop2010": 810, - "Pop2015": 860, - "Pop2020": 920, - "Pop2025": 970, - "Pop2050": 1008, - "Location": [ - -15.61, - -56.09 - ] - }, - { - "City": "Curitiba", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 160, - "Pop1955": 240, - "Pop1960": 380, - "Pop1965": 500, - "Pop1970": 650, - "Pop1975": 920, - "Pop1980": 1310, - "Pop1985": 1550, - "Pop1990": 1830, - "Pop1995": 2140, - "Pop2000": 2490, - "Pop2005": 2910, - "Pop2010": 3080, - "Pop2015": 3320, - "Pop2020": 3580, - "Pop2025": 3740, - "Pop2050": 3836, - "Location": [ - -25.43, - -49.28 - ] - }, - { - "City": "Florianópolis", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 70, - "Pop1955": 80, - "Pop1960": 100, - "Pop1965": 120, - "Pop1970": 150, - "Pop1975": 220, - "Pop1980": 330, - "Pop1985": 410, - "Pop1990": 500, - "Pop1995": 610, - "Pop2000": 730, - "Pop2005": 930, - "Pop2010": 1020, - "Pop2015": 1140, - "Pop2020": 1260, - "Pop2025": 1330, - "Pop2050": 1374, - "Location": [ - -27.57, - -48.61 - ] - }, - { - "City": "Fortaleza", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 260, - "Pop1955": 360, - "Pop1960": 500, - "Pop1965": 660, - "Pop1970": 870, - "Pop1975": 1140, - "Pop1980": 1490, - "Pop1985": 1820, - "Pop1990": 2230, - "Pop1995": 2550, - "Pop2000": 2880, - "Pop2005": 3240, - "Pop2010": 3390, - "Pop2015": 3600, - "Pop2020": 3850, - "Pop2025": 4010, - "Pop2050": 4117, - "Location": [ - -3.78, - -38.58 - ] - }, - { - "City": "Goiânia", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 50, - "Pop1955": 90, - "Pop1960": 150, - "Pop1965": 240, - "Pop1970": 380, - "Pop1975": 530, - "Pop1980": 740, - "Pop1985": 920, - "Pop1990": 1130, - "Pop1995": 1360, - "Pop2000": 1610, - "Pop2005": 1900, - "Pop2010": 2020, - "Pop2015": 2190, - "Pop2020": 2370, - "Pop2025": 2480, - "Pop2050": 2556, - "Location": [ - -16.72, - -49.25 - ] - }, - { - "City": "Grande São Luís", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 120, - "Pop1955": 140, - "Pop1960": 160, - "Pop1965": 200, - "Pop1970": 260, - "Pop1975": 340, - "Pop1980": 440, - "Pop1985": 550, - "Pop1990": 670, - "Pop1995": 780, - "Pop2000": 880, - "Pop2005": 990, - "Pop2010": 1040, - "Pop2015": 1110, - "Pop2020": 1190, - "Pop2025": 1250, - "Pop2050": 1296, - "Location": [ - -2.51, - -44.3 - ] - }, - { - "City": "Grande Vitória", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 80, - "Pop1955": 120, - "Pop1960": 170, - "Pop1965": 240, - "Pop1970": 340, - "Pop1975": 490, - "Pop1980": 720, - "Pop1985": 870, - "Pop1990": 1050, - "Pop1995": 1220, - "Pop2000": 1400, - "Pop2005": 1610, - "Pop2010": 1700, - "Pop2015": 1830, - "Pop2020": 1980, - "Pop2025": 2070, - "Pop2050": 2132, - "Location": [ - -20.3, - -40.35 - ] - }, - { - "City": "João Pessoa", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 120, - "Pop1955": 150, - "Pop1960": 180, - "Pop1965": 230, - "Pop1970": 290, - "Pop1975": 360, - "Pop1980": 450, - "Pop1985": 540, - "Pop1990": 650, - "Pop1995": 740, - "Pop2000": 830, - "Pop2005": 920, - "Pop2010": 960, - "Pop2015": 1010, - "Pop2020": 1090, - "Pop2025": 1140, - "Pop2050": 1183, - "Location": [ - -7.12, - -34.86 - ] - }, - { - "City": "Maceió", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 120, - "Pop1955": 150, - "Pop1960": 180, - "Pop1965": 220, - "Pop1970": 280, - "Pop1975": 340, - "Pop1980": 420, - "Pop1985": 530, - "Pop1990": 660, - "Pop1995": 800, - "Pop2000": 950, - "Pop2005": 1120, - "Pop2010": 1190, - "Pop2015": 1280, - "Pop2020": 1390, - "Pop2025": 1460, - "Pop2050": 1510, - "Location": [ - -9.67, - -35.74 - ] - }, - { - "City": "Manaus", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 90, - "Pop1955": 120, - "Pop1960": 150, - "Pop1965": 210, - "Pop1970": 280, - "Pop1975": 410, - "Pop1980": 600, - "Pop1985": 760, - "Pop1990": 960, - "Pop1995": 1160, - "Pop2000": 1390, - "Pop2005": 1640, - "Pop2010": 1750, - "Pop2015": 1900, - "Pop2020": 2060, - "Pop2025": 2160, - "Pop2050": 2223, - "Location": [ - -3.12, - -60.01 - ] - }, - { - "City": "Natal", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 110, - "Pop1955": 140, - "Pop1960": 180, - "Pop1965": 220, - "Pop1970": 290, - "Pop1975": 370, - "Pop1980": 470, - "Pop1985": 570, - "Pop1990": 690, - "Pop1995": 800, - "Pop2000": 910, - "Pop2005": 1040, - "Pop2010": 1090, - "Pop2015": 1160, - "Pop2020": 1250, - "Pop2025": 1320, - "Pop2050": 1362, - "Location": [ - -5.8, - -35.21 - ] - }, - { - "City": "Norte/Nordeste Catarinense", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 60, - "Pop1955": 90, - "Pop1960": 120, - "Pop1965": 150, - "Pop1970": 200, - "Pop1975": 280, - "Pop1980": 380, - "Pop1985": 480, - "Pop1990": 600, - "Pop1995": 710, - "Pop2000": 820, - "Pop2005": 940, - "Pop2010": 990, - "Pop2015": 1060, - "Pop2020": 1150, - "Pop2025": 1200, - "Pop2050": 1247, - "Location": [ - -26.32, - -48.84 - ] - }, - { - "City": "Pôrto Alegre", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 490, - "Pop1955": 660, - "Pop1960": 880, - "Pop1965": 1110, - "Pop1970": 1400, - "Pop1975": 1730, - "Pop1980": 2130, - "Pop1985": 2500, - "Pop1990": 2930, - "Pop1995": 3240, - "Pop2000": 3500, - "Pop2005": 3800, - "Pop2010": 3920, - "Pop2015": 4100, - "Pop2020": 4340, - "Pop2025": 4520, - "Pop2050": 4633, - "Location": [ - -30.04, - -51.2 - ] - }, - { - "City": "Recife", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 660, - "Pop1955": 840, - "Pop1960": 1070, - "Pop1965": 1330, - "Pop1970": 1640, - "Pop1975": 1870, - "Pop1980": 2120, - "Pop1985": 2390, - "Pop1990": 2690, - "Pop1995": 2960, - "Pop2000": 3230, - "Pop2005": 3530, - "Pop2010": 3650, - "Pop2015": 3830, - "Pop2020": 4070, - "Pop2025": 4240, - "Pop2050": 4347, - "Location": [ - -8.08, - -34.91 - ] - }, - { - "City": "Rio de Janeiro", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 2950, - "Pop1955": 3590, - "Pop1960": 4370, - "Pop1965": 5390, - "Pop1970": 6640, - "Pop1975": 7560, - "Pop1980": 8580, - "Pop1985": 9090, - "Pop1990": 9600, - "Pop1995": 10170, - "Pop2000": 10800, - "Pop2005": 11470, - "Pop2010": 11750, - "Pop2015": 12170, - "Pop2020": 12780, - "Pop2025": 13180, - "Pop2050": 13413, - "Location": [ - -22.72, - -43.45 - ] - }, - { - "City": "Salvador", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 400, - "Pop1955": 520, - "Pop1960": 670, - "Pop1965": 850, - "Pop1970": 1070, - "Pop1975": 1340, - "Pop1980": 1680, - "Pop1985": 1980, - "Pop1990": 2330, - "Pop1995": 2640, - "Pop2000": 2970, - "Pop2005": 3330, - "Pop2010": 3480, - "Pop2015": 3700, - "Pop2020": 3950, - "Pop2025": 4110, - "Pop2050": 4222, - "Location": [ - -12.99, - -38.48 - ] - }, - { - "City": "São Paulo", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 2330, - "Pop1955": 3040, - "Pop1960": 3970, - "Pop1965": 5490, - "Pop1970": 7620, - "Pop1975": 9610, - "Pop1980": 12090, - "Pop1985": 13400, - "Pop1990": 14780, - "Pop1995": 15950, - "Pop2000": 17100, - "Pop2005": 18330, - "Pop2010": 18840, - "Pop2015": 19580, - "Pop2020": 20540, - "Pop2025": 21120, - "Pop2050": 21428, - "Location": [ - -23.58, - -46.62 - ] - }, - { - "City": "Teresina", - "Country": "Brazil", - "Country_ISO3": "BRA", - "Pop1950": 50, - "Pop1955": 80, - "Pop1960": 100, - "Pop1965": 140, - "Pop1970": 200, - "Pop1975": 280, - "Pop1980": 390, - "Pop1985": 490, - "Pop1990": 610, - "Pop1995": 710, - "Pop2000": 790, - "Pop2005": 870, - "Pop2010": 910, - "Pop2015": 960, - "Pop2020": 1030, - "Pop2025": 1080, - "Pop2050": 1121, - "Location": [ - -5.1, - -42.8 - ] - }, - { - "City": "Dimashq", - "Country": "Syrian Arab Republic", - "Country_ISO3": "SYR", - "Pop1950": 370, - "Pop1955": 460, - "Pop1960": 580, - "Pop1965": 730, - "Pop1970": 910, - "Pop1975": 1120, - "Pop1980": 1380, - "Pop1985": 1550, - "Pop1990": 1690, - "Pop1995": 1850, - "Pop2000": 2040, - "Pop2005": 2330, - "Pop2010": 2470, - "Pop2015": 2680, - "Pop2020": 2980, - "Pop2025": 3290, - "Pop2050": 3605, - "Location": [ - 33.49, - 36.29 - ] - }, - { - "City": "Halab", - "Country": "Syrian Arab Republic", - "Country_ISO3": "SYR", - "Pop1950": 320, - "Pop1955": 390, - "Pop1960": 480, - "Pop1965": 590, - "Pop1970": 720, - "Pop1975": 880, - "Pop1980": 1070, - "Pop1985": 1290, - "Pop1990": 1550, - "Pop1995": 1870, - "Pop2000": 2220, - "Pop2005": 2580, - "Pop2010": 2740, - "Pop2015": 2970, - "Pop2020": 3310, - "Pop2025": 3650, - "Pop2050": 3993, - "Location": [ - 36.21, - 37.15 - ] - }, - { - "City": "Hims", - "Country": "Syrian Arab Republic", - "Country_ISO3": "SYR", - "Pop1950": 100, - "Pop1955": 130, - "Pop1960": 160, - "Pop1965": 200, - "Pop1970": 250, - "Pop1975": 310, - "Pop1980": 390, - "Pop1985": 470, - "Pop1990": 560, - "Pop1995": 680, - "Pop2000": 810, - "Pop2005": 950, - "Pop2010": 1000, - "Pop2015": 1100, - "Pop2020": 1230, - "Pop2025": 1360, - "Pop2050": 1504, - "Location": [ - 34.73, - 36.71 - ] - }, - { - "City": "Krung Thep", - "Country": "Thailand", - "Country_ISO3": "THA", - "Pop1950": 1360, - "Pop1955": 1710, - "Pop1960": 2150, - "Pop1965": 2580, - "Pop1970": 3110, - "Pop1975": 3840, - "Pop1980": 4720, - "Pop1985": 5280, - "Pop1990": 5890, - "Pop1995": 6110, - "Pop2000": 6330, - "Pop2005": 6580, - "Pop2010": 6700, - "Pop2015": 6920, - "Pop2020": 7330, - "Pop2025": 7810, - "Pop2050": 8332, - "Location": [ - 13.75, - 100.51 - ] - }, - { - "City": "Lomé", - "Country": "Togo", - "Country_ISO3": "TGO", - "Pop1950": 30, - "Pop1955": 60, - "Pop1960": 100, - "Pop1965": 140, - "Pop1970": 190, - "Pop1975": 260, - "Pop1980": 340, - "Pop1985": 470, - "Pop1990": 620, - "Pop1995": 800, - "Pop2000": 1020, - "Pop2005": 1320, - "Pop2010": 1450, - "Pop2015": 1670, - "Pop2020": 2040, - "Pop2025": 2410, - "Pop2050": 2791, - "Location": [ - 6.1, - 1.2 - ] - }, - { - "City": "Dubayy", - "Country": "United Arab Emirates", - "Country_ISO3": "ARE", - "Pop1950": 20, - "Pop1955": 30, - "Pop1960": 40, - "Pop1965": 50, - "Pop1970": 80, - "Pop1975": 170, - "Pop1980": 250, - "Pop1985": 340, - "Pop1990": 470, - "Pop1995": 650, - "Pop2000": 940, - "Pop2005": 1270, - "Pop2010": 1380, - "Pop2015": 1520, - "Pop2020": 1710, - "Pop2025": 1890, - "Pop2050": 2077, - "Location": [ - 25.27, - 55.32 - ] - }, - { - "City": "Adana", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 140, - "Pop1955": 200, - "Pop1960": 270, - "Pop1965": 340, - "Pop1970": 400, - "Pop1975": 470, - "Pop1980": 570, - "Pop1985": 760, - "Pop1990": 910, - "Pop1995": 1010, - "Pop2000": 1120, - "Pop2005": 1240, - "Pop2010": 1290, - "Pop2015": 1360, - "Pop2020": 1470, - "Pop2025": 1560, - "Pop2050": 1635, - "Location": [ - 37, - 35.32 - ] - }, - { - "City": "Ankara", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 280, - "Pop1955": 440, - "Pop1960": 640, - "Pop1965": 950, - "Pop1970": 1340, - "Pop1975": 1710, - "Pop1980": 1890, - "Pop1985": 2210, - "Pop1990": 2560, - "Pop1995": 2840, - "Pop2000": 3180, - "Pop2005": 3570, - "Pop2010": 3720, - "Pop2015": 3910, - "Pop2020": 4180, - "Pop2025": 4400, - "Pop2050": 4589, - "Location": [ - 39.92, - 32.85 - ] - }, - { - "City": "Antalya", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 30, - "Pop1955": 40, - "Pop1960": 50, - "Pop1965": 70, - "Pop1970": 100, - "Pop1975": 130, - "Pop1980": 180, - "Pop1985": 260, - "Pop1990": 370, - "Pop1995": 470, - "Pop2000": 600, - "Pop2005": 740, - "Pop2010": 780, - "Pop2015": 840, - "Pop2020": 910, - "Pop2025": 970, - "Pop2050": 1021, - "Location": [ - 36.89, - 30.7 - ] - }, - { - "City": "Bursa", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 150, - "Pop1955": 180, - "Pop1960": 220, - "Pop1965": 300, - "Pop1970": 320, - "Pop1975": 340, - "Pop1980": 480, - "Pop1985": 600, - "Pop1990": 820, - "Pop1995": 980, - "Pop2000": 1180, - "Pop2005": 1410, - "Pop2010": 1490, - "Pop2015": 1590, - "Pop2020": 1710, - "Pop2025": 1820, - "Pop2050": 1906, - "Location": [ - 40.19, - 29.07 - ] - }, - { - "City": "Gaziantep", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 100, - "Pop1955": 140, - "Pop1960": 180, - "Pop1965": 230, - "Pop1970": 260, - "Pop1975": 300, - "Pop1980": 370, - "Pop1985": 470, - "Pop1990": 600, - "Pop1995": 710, - "Pop2000": 840, - "Pop2005": 990, - "Pop2010": 1040, - "Pop2015": 1110, - "Pop2020": 1200, - "Pop2025": 1270, - "Pop2050": 1340, - "Location": [ - 37.04, - 37.3 - ] - }, - { - "City": "Istanbul", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 970, - "Pop1955": 1250, - "Pop1960": 1450, - "Pop1965": 2000, - "Pop1970": 2770, - "Pop1975": 3600, - "Pop1980": 4400, - "Pop1985": 5410, - "Pop1990": 6550, - "Pop1995": 7660, - "Pop2000": 8740, - "Pop2005": 9710, - "Pop2010": 10060, - "Pop2015": 10530, - "Pop2020": 11180, - "Pop2025": 11700, - "Pop2050": 12102, - "Location": [ - 41.06, - 29 - ] - }, - { - "City": "Izmir", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 220, - "Pop1955": 290, - "Pop1960": 360, - "Pop1965": 560, - "Pop1970": 880, - "Pop1975": 1050, - "Pop1980": 1220, - "Pop1985": 1470, - "Pop1990": 1740, - "Pop1995": 1970, - "Pop2000": 2220, - "Pop2005": 2490, - "Pop2010": 2590, - "Pop2015": 2720, - "Pop2020": 2920, - "Pop2025": 3080, - "Pop2050": 3223, - "Location": [ - 38.43, - 27.14 - ] - }, - { - "City": "Konya", - "Country": "Turkey", - "Country_ISO3": "TUR", - "Pop1950": 100, - "Pop1955": 140, - "Pop1960": 180, - "Pop1965": 240, - "Pop1970": 240, - "Pop1975": 250, - "Pop1980": 340, - "Pop1985": 430, - "Pop1990": 510, - "Pop1995": 610, - "Pop2000": 730, - "Pop2005": 870, - "Pop2010": 920, - "Pop2015": 980, - "Pop2020": 1060, - "Pop2025": 1130, - "Pop2050": 1185, - "Location": [ - 37.87, - 32.48 - ] - }, - { - "City": "Kampala", - "Country": "Uganda", - "Country_ISO3": "UGA", - "Pop1950": 100, - "Pop1955": 110, - "Pop1960": 140, - "Pop1965": 220, - "Pop1970": 340, - "Pop1975": 400, - "Pop1980": 470, - "Pop1985": 600, - "Pop1990": 760, - "Pop1995": 910, - "Pop2000": 1100, - "Pop2005": 1320, - "Pop2010": 1420, - "Pop2015": 1600, - "Pop2020": 1980, - "Pop2025": 2510, - "Pop2050": 3198, - "Location": [ - 0.32, - 32.57 - ] - }, - { - "City": "Dnipropetrovs'k", - "Country": "Ukraine", - "Country_ISO3": "UKR", - "Pop1950": 540, - "Pop1955": 610, - "Pop1960": 680, - "Pop1965": 770, - "Pop1970": 870, - "Pop1975": 980, - "Pop1980": 1080, - "Pop1985": 1140, - "Pop1990": 1160, - "Pop1995": 1120, - "Pop2000": 1080, - "Pop2005": 1060, - "Pop2010": 1050, - "Pop2015": 1040, - "Pop2020": 1040, - "Pop2025": 1040, - "Pop2050": 1042, - "Location": [ - 48.42, - 35.13 - ] - }, - { - "City": "Donets'k", - "Country": "Ukraine", - "Country_ISO3": "UKR", - "Pop1950": 580, - "Pop1955": 650, - "Pop1960": 720, - "Pop1965": 800, - "Pop1970": 890, - "Pop1975": 960, - "Pop1980": 1030, - "Pop1985": 1080, - "Pop1990": 1100, - "Pop1995": 1060, - "Pop2000": 1030, - "Pop2005": 1000, - "Pop2010": 990, - "Pop2015": 980, - "Pop2020": 970, - "Pop2025": 970, - "Pop2050": 972, - "Location": [ - 48.04, - 37.73 - ] - }, - { - "City": "Kharkiv", - "Country": "Ukraine", - "Country_ISO3": "UKR", - "Pop1950": 760, - "Pop1955": 860, - "Pop1960": 970, - "Pop1965": 1090, - "Pop1970": 1230, - "Pop1975": 1350, - "Pop1980": 1470, - "Pop1985": 1540, - "Pop1990": 1590, - "Pop1995": 1530, - "Pop2000": 1480, - "Pop2005": 1460, - "Pop2010": 1460, - "Pop2015": 1460, - "Pop2020": 1460, - "Pop2025": 1460, - "Pop2050": 1455, - "Location": [ - 49.98, - 36.2 - ] - }, - { - "City": "Kyiv", - "Country": "Ukraine", - "Country_ISO3": "UKR", - "Pop1950": 820, - "Pop1955": 970, - "Pop1960": 1160, - "Pop1965": 1390, - "Pop1970": 1660, - "Pop1975": 1930, - "Pop1980": 2200, - "Pop1985": 2410, - "Pop1990": 2570, - "Pop1995": 2590, - "Pop2000": 2610, - "Pop2005": 2670, - "Pop2010": 2710, - "Pop2015": 2750, - "Pop2020": 2770, - "Pop2025": 2770, - "Pop2050": 2772, - "Location": [ - 50.44, - 30.5 - ] - }, - { - "City": "Odesa", - "Country": "Ukraine", - "Country_ISO3": "UKR", - "Pop1950": 530, - "Pop1955": 610, - "Pop1960": 690, - "Pop1965": 790, - "Pop1970": 900, - "Pop1975": 980, - "Pop1980": 1050, - "Pop1985": 1080, - "Pop1990": 1090, - "Pop1995": 1060, - "Pop2000": 1040, - "Pop2005": 1000, - "Pop2010": 990, - "Pop2015": 980, - "Pop2020": 970, - "Pop2025": 970, - "Pop2050": 970, - "Location": [ - 46.46, - 30.73 - ] - }, - { - "City": "Zaporizhzhya", - "Country": "Ukraine", - "Country_ISO3": "UKR", - "Pop1950": 320, - "Pop1955": 380, - "Pop1960": 460, - "Pop1965": 550, - "Pop1970": 660, - "Pop1975": 730, - "Pop1980": 800, - "Pop1985": 840, - "Pop1990": 870, - "Pop1995": 850, - "Pop2000": 820, - "Pop2005": 800, - "Pop2010": 790, - "Pop2015": 780, - "Pop2020": 770, - "Pop2025": 770, - "Pop2050": 772, - "Location": [ - 47.85, - 35.15 - ] - }, - { - "City": "Al-Iskandariyah", - "Country": "Egypt", - "Country_ISO3": "EGY", - "Pop1950": 1040, - "Pop1955": 1250, - "Pop1960": 1500, - "Pop1965": 1750, - "Pop1970": 1990, - "Pop1975": 2240, - "Pop1980": 2520, - "Pop1985": 2830, - "Pop1990": 3060, - "Pop1995": 3280, - "Pop2000": 3600, - "Pop2005": 4000, - "Pop2010": 4160, - "Pop2015": 4420, - "Pop2020": 4820, - "Pop2025": 5210, - "Pop2050": 5652, - "Location": [ - 31.2, - 29.9 - ] - }, - { - "City": "Al-Qahirah", - "Country": "Egypt", - "Country_ISO3": "EGY", - "Pop1950": 2490, - "Pop1955": 3030, - "Pop1960": 3680, - "Pop1965": 4740, - "Pop1970": 5580, - "Pop1975": 6450, - "Pop1980": 7350, - "Pop1985": 8330, - "Pop1990": 9060, - "Pop1995": 9710, - "Pop2000": 10530, - "Pop2005": 11490, - "Pop2010": 11890, - "Pop2015": 12500, - "Pop2020": 13460, - "Pop2025": 14450, - "Pop2050": 15561, - "Location": [ - 30.07, - 31.25 - ] - }, - { - "City": "Birmingham", - "Country": "United Kingdom", - "Country_ISO3": "GBR", - "Pop1950": 2230, - "Pop1955": 2280, - "Pop1960": 2340, - "Pop1965": 2360, - "Pop1970": 2370, - "Pop1975": 2360, - "Pop1980": 2360, - "Pop1985": 2330, - "Pop1990": 2300, - "Pop1995": 2290, - "Pop2000": 2280, - "Pop2005": 2280, - "Pop2010": 2280, - "Pop2015": 2290, - "Pop2020": 2300, - "Pop2025": 2320, - "Pop2050": 2323, - "Location": [ - 52.49, - -1.86 - ] - }, - { - "City": "Glasgow", - "Country": "United Kingdom", - "Country_ISO3": "GBR", - "Pop1950": 1760, - "Pop1955": 1780, - "Pop1960": 1800, - "Pop1965": 1770, - "Pop1970": 1730, - "Pop1975": 1600, - "Pop1980": 1460, - "Pop1985": 1330, - "Pop1990": 1220, - "Pop1995": 1190, - "Pop2000": 1170, - "Pop2005": 1160, - "Pop2010": 1160, - "Pop2015": 1160, - "Pop2020": 1180, - "Pop2025": 1190, - "Pop2050": 1197, - "Location": [ - 55.86, - -4.26 - ] - }, - { - "City": "Liverpool", - "Country": "United Kingdom", - "Country_ISO3": "GBR", - "Pop1950": 1380, - "Pop1955": 1380, - "Pop1960": 1380, - "Pop1965": 1330, - "Pop1970": 1280, - "Pop1975": 1020, - "Pop1980": 780, - "Pop1985": 790, - "Pop1990": 830, - "Pop1995": 830, - "Pop2000": 820, - "Pop2005": 810, - "Pop2010": 810, - "Pop2015": 820, - "Pop2020": 820, - "Pop2025": 840, - "Pop2050": 845, - "Location": [ - 53.42, - -2.97 - ] - }, - { - "City": "London", - "Country": "United Kingdom", - "Country_ISO3": "GBR", - "Pop1950": 8360, - "Pop1955": 8280, - "Pop1960": 8200, - "Pop1965": 7870, - "Pop1970": 7510, - "Pop1975": 7550, - "Pop1980": 7660, - "Pop1985": 7670, - "Pop1990": 7650, - "Pop1995": 7910, - "Pop2000": 8220, - "Pop2005": 8500, - "Pop2010": 8570, - "Pop2015": 8610, - "Pop2020": 8620, - "Pop2025": 8620, - "Pop2050": 8618, - "Location": [ - 51.48, - -0.17 - ] - }, - { - "City": "Manchester", - "Country": "United Kingdom", - "Country_ISO3": "GBR", - "Pop1950": 2420, - "Pop1955": 2420, - "Pop1960": 2430, - "Pop1965": 2410, - "Pop1970": 2400, - "Pop1975": 2370, - "Pop1980": 2340, - "Pop1985": 2310, - "Pop1990": 2280, - "Pop1995": 2260, - "Pop2000": 2240, - "Pop2005": 2230, - "Pop2010": 2230, - "Pop2015": 2240, - "Pop2020": 2250, - "Pop2025": 2260, - "Pop2050": 2267, - "Location": [ - 53.47, - -2.26 - ] - }, - { - "City": "Newcastle upon Tyne", - "Country": "United Kingdom", - "Country_ISO3": "GBR", - "Pop1950": 910, - "Pop1955": 920, - "Pop1960": 930, - "Pop1965": 910, - "Pop1970": 890, - "Pop1975": 840, - "Pop1980": 790, - "Pop1985": 820, - "Pop1990": 880, - "Pop1995": 880, - "Pop2000": 880, - "Pop2005": 880, - "Pop2010": 880, - "Pop2015": 890, - "Pop2020": 900, - "Pop2025": 910, - "Pop2050": 918, - "Location": [ - 54.96, - -1.6 - ] - }, - { - "City": "West Yorkshire", - "Country": "United Kingdom", - "Country_ISO3": "GBR", - "Pop1950": 1690, - "Pop1955": 1700, - "Pop1960": 1700, - "Pop1965": 1710, - "Pop1970": 1730, - "Pop1975": 1620, - "Pop1980": 1500, - "Pop1985": 1460, - "Pop1990": 1450, - "Pop1995": 1470, - "Pop2000": 1500, - "Pop2005": 1520, - "Pop2010": 1530, - "Pop2015": 1540, - "Pop2020": 1550, - "Pop2025": 1560, - "Pop2050": 1575, - "Location": [ - 53.79, - -1.54 - ] - }, - { - "City": "Dar es Salaam", - "Country": "United Republic of Tanzania", - "Country_ISO3": "TZA", - "Pop1950": 70, - "Pop1955": 110, - "Pop1960": 160, - "Pop1965": 230, - "Pop1970": 360, - "Pop1975": 570, - "Pop1980": 840, - "Pop1985": 1050, - "Pop1990": 1320, - "Pop1995": 1670, - "Pop2000": 2120, - "Pop2005": 2680, - "Pop2010": 2930, - "Pop2015": 3320, - "Pop2020": 4020, - "Pop2025": 4800, - "Pop2050": 5688, - "Location": [ - -6.81, - 39.25 - ] - }, - { - "City": "Atlanta", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 510, - "Pop1955": 630, - "Pop1960": 780, - "Pop1965": 960, - "Pop1970": 1180, - "Pop1975": 1390, - "Pop1980": 1620, - "Pop1985": 1880, - "Pop1990": 2180, - "Pop1995": 2780, - "Pop2000": 3540, - "Pop2005": 4310, - "Pop2010": 4510, - "Pop2015": 4700, - "Pop2020": 4890, - "Pop2025": 5040, - "Pop2050": 5151, - "Location": [ - 33.79, - -84.34 - ] - }, - { - "City": "Austin", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 140, - "Pop1955": 160, - "Pop1960": 190, - "Pop1965": 220, - "Pop1970": 270, - "Pop1975": 320, - "Pop1980": 380, - "Pop1985": 470, - "Pop1990": 570, - "Pop1995": 720, - "Pop2000": 910, - "Pop2005": 1110, - "Pop2010": 1160, - "Pop2015": 1220, - "Pop2020": 1280, - "Pop2025": 1330, - "Pop2050": 1372, - "Location": [ - 30.27, - -97.73 - ] - }, - { - "City": "Baltimore", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 1170, - "Pop1955": 1290, - "Pop1960": 1420, - "Pop1965": 1490, - "Pop1970": 1560, - "Pop1975": 1650, - "Pop1980": 1750, - "Pop1985": 1800, - "Pop1990": 1850, - "Pop1995": 1960, - "Pop2000": 2080, - "Pop2005": 2210, - "Pop2010": 2260, - "Pop2015": 2320, - "Pop2020": 2420, - "Pop2025": 2510, - "Pop2050": 2578, - "Location": [ - 39.32, - -76.61 - ] - }, - { - "City": "Boston", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 2550, - "Pop1955": 2680, - "Pop1960": 2820, - "Pop1965": 3000, - "Pop1970": 3190, - "Pop1975": 3230, - "Pop1980": 3280, - "Pop1985": 3350, - "Pop1990": 3430, - "Pop1995": 3730, - "Pop2000": 4050, - "Pop2005": 4360, - "Pop2010": 4470, - "Pop2015": 4600, - "Pop2020": 4770, - "Pop2025": 4920, - "Pop2050": 5032, - "Location": [ - 42.37, - -71.1 - ] - }, - { - "City": "Bridgeport-Stamford", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 420, - "Pop1955": 510, - "Pop1960": 620, - "Pop1965": 660, - "Pop1970": 700, - "Pop1975": 700, - "Pop1980": 700, - "Pop1985": 710, - "Pop1990": 710, - "Pop1995": 800, - "Pop2000": 890, - "Pop2005": 990, - "Pop2010": 1020, - "Pop2015": 1060, - "Pop2020": 1110, - "Pop2025": 1150, - "Pop2050": 1193, - "Location": [ - 41.18, - -73.19 - ] - }, - { - "City": "Buffalo", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 900, - "Pop1955": 980, - "Pop1960": 1060, - "Pop1965": 1070, - "Pop1970": 1080, - "Pop1975": 1040, - "Pop1980": 1000, - "Pop1985": 980, - "Pop1990": 960, - "Pop1995": 970, - "Pop2000": 980, - "Pop2005": 1000, - "Pop2010": 1020, - "Pop2015": 1050, - "Pop2020": 1100, - "Pop2025": 1140, - "Pop2050": 1180, - "Location": [ - 42.89, - -78.84 - ] - }, - { - "City": "Charlotte", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 140, - "Pop1955": 170, - "Pop1960": 210, - "Pop1965": 240, - "Pop1970": 280, - "Pop1975": 320, - "Pop1980": 350, - "Pop1985": 400, - "Pop1990": 460, - "Pop1995": 600, - "Pop2000": 770, - "Pop2005": 950, - "Pop2010": 1000, - "Pop2015": 1040, - "Pop2020": 1100, - "Pop2025": 1140, - "Pop2050": 1183, - "Location": [ - 35.2, - -80.83 - ] - }, - { - "City": "Chicago", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 5000, - "Pop1955": 5560, - "Pop1960": 6180, - "Pop1965": 6640, - "Pop1970": 7110, - "Pop1975": 7160, - "Pop1980": 7220, - "Pop1985": 7280, - "Pop1990": 7370, - "Pop1995": 7840, - "Pop2000": 8330, - "Pop2005": 8820, - "Pop2010": 8990, - "Pop2015": 9210, - "Pop2020": 9520, - "Pop2025": 9760, - "Pop2050": 9932, - "Location": [ - 41.82, - -87.64 - ] - }, - { - "City": "Cincinnati", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 880, - "Pop1955": 980, - "Pop1960": 1090, - "Pop1965": 1140, - "Pop1970": 1200, - "Pop1975": 1220, - "Pop1980": 1230, - "Pop1985": 1280, - "Pop1990": 1340, - "Pop1995": 1420, - "Pop2000": 1510, - "Pop2005": 1600, - "Pop2010": 1640, - "Pop2015": 1690, - "Pop2020": 1760, - "Pop2025": 1830, - "Pop2050": 1886, - "Location": [ - 39.14, - -84.47 - ] - }, - { - "City": "Cleveland", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 1390, - "Pop1955": 1580, - "Pop1960": 1790, - "Pop1965": 1880, - "Pop1970": 1950, - "Pop1975": 1850, - "Pop1980": 1750, - "Pop1985": 1710, - "Pop1990": 1680, - "Pop1995": 1730, - "Pop2000": 1790, - "Pop2005": 1860, - "Pop2010": 1890, - "Pop2015": 1940, - "Pop2020": 2030, - "Pop2025": 2100, - "Pop2050": 2165, - "Location": [ - 41.39, - -81.72 - ] - }, - { - "City": "Columbus, Ohio", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 440, - "Pop1955": 520, - "Pop1960": 620, - "Pop1965": 700, - "Pop1970": 790, - "Pop1975": 810, - "Pop1980": 840, - "Pop1985": 890, - "Pop1990": 950, - "Pop1995": 1040, - "Pop2000": 1140, - "Pop2005": 1240, - "Pop2010": 1270, - "Pop2015": 1310, - "Pop2020": 1380, - "Pop2025": 1430, - "Pop2050": 1477, - "Location": [ - 40.04, - -82.99 - ] - }, - { - "City": "Dallas-Fort Worth", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 870, - "Pop1955": 1120, - "Pop1960": 1450, - "Pop1965": 1720, - "Pop1970": 2020, - "Pop1975": 2230, - "Pop1980": 2470, - "Pop1985": 2820, - "Pop1990": 3220, - "Pop1995": 3660, - "Pop2000": 4170, - "Pop2005": 4660, - "Pop2010": 4800, - "Pop2015": 4960, - "Pop2020": 5150, - "Pop2025": 5300, - "Pop2050": 5419, - "Location": [ - 32.76, - -96.66 - ] - }, - { - "City": "Dayton", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 350, - "Pop1955": 420, - "Pop1960": 510, - "Pop1965": 590, - "Pop1970": 680, - "Pop1975": 640, - "Pop1980": 600, - "Pop1985": 600, - "Pop1990": 620, - "Pop1995": 660, - "Pop2000": 710, - "Pop2005": 750, - "Pop2010": 770, - "Pop2015": 800, - "Pop2020": 840, - "Pop2025": 880, - "Pop2050": 909, - "Location": [ - 39.75, - -84.19 - ] - }, - { - "City": "Denver-Aurora", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 500, - "Pop1955": 640, - "Pop1960": 810, - "Pop1965": 920, - "Pop1970": 1050, - "Pop1975": 1200, - "Pop1980": 1360, - "Pop1985": 1440, - "Pop1990": 1530, - "Pop1995": 1750, - "Pop2000": 2000, - "Pop2005": 2240, - "Pop2010": 2310, - "Pop2015": 2400, - "Pop2020": 2500, - "Pop2025": 2590, - "Pop2050": 2661, - "Location": [ - 39.57, - -105.07 - ] - }, - { - "City": "Detroit", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 2770, - "Pop1955": 3140, - "Pop1960": 3550, - "Pop1965": 3760, - "Pop1970": 3970, - "Pop1975": 3880, - "Pop1980": 3810, - "Pop1985": 3750, - "Pop1990": 3700, - "Pop1995": 3800, - "Pop2000": 3910, - "Pop2005": 4040, - "Pop2010": 4100, - "Pop2015": 4200, - "Pop2020": 4360, - "Pop2025": 4500, - "Pop2050": 4606, - "Location": [ - 42.39, - -83.07 - ] - }, - { - "City": "El Paso", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 140, - "Pop1955": 200, - "Pop1960": 280, - "Pop1965": 310, - "Pop1970": 340, - "Pop1975": 390, - "Pop1980": 460, - "Pop1985": 510, - "Pop1990": 570, - "Pop1995": 620, - "Pop2000": 680, - "Pop2005": 730, - "Pop2010": 750, - "Pop2015": 780, - "Pop2020": 820, - "Pop2025": 860, - "Pop2050": 886, - "Location": [ - 31.77, - -106.45 - ] - }, - { - "City": "Hartford", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 420, - "Pop1955": 450, - "Pop1960": 480, - "Pop1965": 570, - "Pop1970": 670, - "Pop1975": 700, - "Pop1980": 730, - "Pop1985": 760, - "Pop1990": 780, - "Pop1995": 820, - "Pop2000": 850, - "Pop2005": 890, - "Pop2010": 910, - "Pop2015": 940, - "Pop2020": 990, - "Pop2025": 1030, - "Pop2050": 1066, - "Location": [ - 41.76, - -72.7 - ] - }, - { - "City": "Honolulu", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 250, - "Pop1955": 300, - "Pop1960": 350, - "Pop1965": 400, - "Pop1970": 440, - "Pop1975": 510, - "Pop1980": 580, - "Pop1985": 610, - "Pop1990": 640, - "Pop1995": 680, - "Pop2000": 720, - "Pop2005": 770, - "Pop2010": 790, - "Pop2015": 810, - "Pop2020": 850, - "Pop2025": 890, - "Pop2050": 923, - "Location": [ - 21.32, - -157.86 - ] - }, - { - "City": "Houston", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 710, - "Pop1955": 900, - "Pop1960": 1150, - "Pop1965": 1400, - "Pop1970": 1690, - "Pop1975": 2030, - "Pop1980": 2420, - "Pop1985": 2660, - "Pop1990": 2920, - "Pop1995": 3350, - "Pop2000": 3850, - "Pop2005": 4320, - "Pop2010": 4460, - "Pop2015": 4610, - "Pop2020": 4790, - "Pop2025": 4940, - "Pop2050": 5049, - "Location": [ - 29.77, - -95.4 - ] - }, - { - "City": "Indianapolis", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 500, - "Pop1955": 570, - "Pop1960": 640, - "Pop1965": 730, - "Pop1970": 820, - "Pop1975": 830, - "Pop1980": 840, - "Pop1985": 880, - "Pop1990": 920, - "Pop1995": 1060, - "Pop2000": 1230, - "Pop2005": 1390, - "Pop2010": 1440, - "Pop2015": 1490, - "Pop2020": 1560, - "Pop2025": 1620, - "Pop2050": 1673, - "Location": [ - 39.81, - -86.13 - ] - }, - { - "City": "Jacksonville, Florida", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 250, - "Pop1955": 300, - "Pop1960": 380, - "Pop1965": 450, - "Pop1970": 530, - "Pop1975": 560, - "Pop1980": 600, - "Pop1985": 670, - "Pop1990": 740, - "Pop1995": 810, - "Pop2000": 890, - "Pop2005": 960, - "Pop2010": 990, - "Pop2015": 1020, - "Pop2020": 1070, - "Pop2025": 1120, - "Pop2050": 1157, - "Location": [ - 30.33, - -81.65 - ] - }, - { - "City": "Kansas City", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 700, - "Pop1955": 810, - "Pop1960": 920, - "Pop1965": 1000, - "Pop1970": 1090, - "Pop1975": 1080, - "Pop1980": 1080, - "Pop1985": 1150, - "Pop1990": 1230, - "Pop1995": 1300, - "Pop2000": 1360, - "Pop2005": 1440, - "Pop2010": 1470, - "Pop2015": 1510, - "Pop2020": 1580, - "Pop2025": 1640, - "Pop2050": 1696, - "Location": [ - 38.99, - -94.62 - ] - }, - { - "City": "Las Vegas", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 40, - "Pop1955": 60, - "Pop1960": 90, - "Pop1965": 150, - "Pop1970": 240, - "Pop1975": 320, - "Pop1980": 440, - "Pop1985": 560, - "Pop1990": 710, - "Pop1995": 970, - "Pop2000": 1340, - "Pop2005": 1720, - "Pop2010": 1820, - "Pop2015": 1920, - "Pop2020": 2010, - "Pop2025": 2080, - "Pop2050": 2146, - "Location": [ - 36.17, - -115.13 - ] - }, - { - "City": "Los Angeles-Long Beach-Santa Ana", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 4050, - "Pop1955": 5150, - "Pop1960": 6530, - "Pop1965": 7410, - "Pop1970": 8380, - "Pop1975": 8930, - "Pop1980": 9510, - "Pop1985": 10180, - "Pop1990": 10880, - "Pop1995": 11340, - "Pop2000": 11810, - "Pop2005": 12310, - "Pop2010": 12500, - "Pop2015": 12770, - "Pop2020": 13160, - "Pop2025": 13460, - "Pop2050": 13672, - "Location": [ - 34, - -118.25 - ] - }, - { - "City": "Louisville", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 480, - "Pop1955": 540, - "Pop1960": 610, - "Pop1965": 670, - "Pop1970": 740, - "Pop1975": 750, - "Pop1980": 760, - "Pop1985": 760, - "Pop1990": 760, - "Pop1995": 810, - "Pop2000": 870, - "Pop2005": 920, - "Pop2010": 950, - "Pop2015": 980, - "Pop2020": 1030, - "Pop2025": 1070, - "Pop2050": 1108, - "Location": [ - 38.25, - -85.76 - ] - }, - { - "City": "Memphis", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 410, - "Pop1955": 470, - "Pop1960": 550, - "Pop1965": 600, - "Pop1970": 670, - "Pop1975": 720, - "Pop1980": 780, - "Pop1985": 800, - "Pop1990": 830, - "Pop1995": 900, - "Pop2000": 980, - "Pop2005": 1050, - "Pop2010": 1080, - "Pop2015": 1120, - "Pop2020": 1170, - "Pop2025": 1220, - "Pop2050": 1262, - "Location": [ - 35.11, - -90 - ] - }, - { - "City": "Miami", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 620, - "Pop1955": 920, - "Pop1960": 1360, - "Pop1965": 1710, - "Pop1970": 2140, - "Pop1975": 2590, - "Pop1980": 3120, - "Pop1985": 3520, - "Pop1990": 3970, - "Pop1995": 4430, - "Pop2000": 4950, - "Pop2005": 5440, - "Pop2010": 5580, - "Pop2015": 5760, - "Pop2020": 5970, - "Pop2025": 6140, - "Pop2050": 6272, - "Location": [ - 25.83, - -80.27 - ] - }, - { - "City": "Milwaukee", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 840, - "Pop1955": 980, - "Pop1960": 1150, - "Pop1965": 1200, - "Pop1970": 1250, - "Pop1975": 1230, - "Pop1980": 1210, - "Pop1985": 1220, - "Pop1990": 1230, - "Pop1995": 1270, - "Pop2000": 1310, - "Pop2005": 1360, - "Pop2010": 1390, - "Pop2015": 1430, - "Pop2020": 1500, - "Pop2025": 1550, - "Pop2050": 1602, - "Location": [ - 43.06, - -87.99 - ] - }, - { - "City": "Minneapolis-St. Paul", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 1000, - "Pop1955": 1180, - "Pop1960": 1380, - "Pop1965": 1540, - "Pop1970": 1710, - "Pop1975": 1750, - "Pop1980": 1790, - "Pop1985": 1940, - "Pop1990": 2090, - "Pop1995": 2240, - "Pop2000": 2400, - "Pop2005": 2560, - "Pop2010": 2620, - "Pop2015": 2700, - "Pop2020": 2810, - "Pop2025": 2900, - "Pop2050": 2983, - "Location": [ - 44.92, - -93.3 - ] - }, - { - "City": "Nashville-Davidson", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 260, - "Pop1955": 300, - "Pop1960": 350, - "Pop1965": 400, - "Pop1970": 450, - "Pop1975": 480, - "Pop1980": 520, - "Pop1985": 550, - "Pop1990": 580, - "Pop1995": 660, - "Pop2000": 760, - "Pop2005": 850, - "Pop2010": 880, - "Pop2015": 910, - "Pop2020": 960, - "Pop2025": 1000, - "Pop2050": 1034, - "Location": [ - 36.14, - -86.81 - ] - }, - { - "City": "New Orleans", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 660, - "Pop1955": 750, - "Pop1960": 850, - "Pop1965": 900, - "Pop1970": 960, - "Pop1975": 1020, - "Pop1980": 1080, - "Pop1985": 1060, - "Pop1990": 1040, - "Pop1995": 1020, - "Pop2000": 1010, - "Pop2005": 1000, - "Pop2010": 780, - "Pop2015": 980, - "Pop2020": 980, - "Pop2025": 1000, - "Pop2050": 1037, - "Location": [ - 29.95, - -90.09 - ] - }, - { - "City": "New York-Newark", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 12340, - "Pop1955": 13220, - "Pop1960": 14160, - "Pop1965": 15180, - "Pop1970": 16190, - "Pop1975": 15880, - "Pop1980": 15600, - "Pop1985": 15830, - "Pop1990": 16090, - "Pop1995": 16940, - "Pop2000": 17850, - "Pop2005": 18730, - "Pop2010": 19040, - "Pop2015": 19440, - "Pop2020": 19970, - "Pop2025": 20370, - "Pop2050": 20628, - "Location": [ - 40.7, - -73.9 - ] - }, - { - "City": "Oklahoma City", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 280, - "Pop1955": 350, - "Pop1960": 430, - "Pop1965": 480, - "Pop1970": 530, - "Pop1975": 570, - "Pop1980": 620, - "Pop1985": 660, - "Pop1990": 710, - "Pop1995": 730, - "Pop2000": 750, - "Pop2005": 770, - "Pop2010": 790, - "Pop2015": 810, - "Pop2020": 850, - "Pop2025": 890, - "Pop2050": 922, - "Location": [ - 35.48, - -97.53 - ] - }, - { - "City": "Orlando", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 80, - "Pop1955": 120, - "Pop1960": 200, - "Pop1965": 250, - "Pop1970": 310, - "Pop1975": 430, - "Pop1980": 580, - "Pop1985": 720, - "Pop1990": 890, - "Pop1995": 1020, - "Pop2000": 1160, - "Pop2005": 1310, - "Pop2010": 1350, - "Pop2015": 1400, - "Pop2020": 1470, - "Pop2025": 1530, - "Pop2050": 1574, - "Location": [ - 28.54, - -81.37 - ] - }, - { - "City": "Philadelphia", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 3130, - "Pop1955": 3510, - "Pop1960": 3930, - "Pop1965": 4160, - "Pop1970": 4400, - "Pop1975": 4470, - "Pop1980": 4540, - "Pop1985": 4630, - "Pop1990": 4720, - "Pop1995": 4940, - "Pop2000": 5160, - "Pop2005": 5400, - "Pop2010": 5490, - "Pop2015": 5630, - "Pop2020": 5840, - "Pop2025": 6000, - "Pop2050": 6133, - "Location": [ - 39.92, - -75.21 - ] - }, - { - "City": "Phoenix-Mesa", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 220, - "Pop1955": 350, - "Pop1960": 560, - "Pop1965": 700, - "Pop1970": 870, - "Pop1975": 1120, - "Pop1980": 1420, - "Pop1985": 1700, - "Pop1990": 2020, - "Pop1995": 2440, - "Pop2000": 2930, - "Pop2005": 3420, - "Pop2010": 3550, - "Pop2015": 3690, - "Pop2020": 3840, - "Pop2025": 3960, - "Pop2050": 4062, - "Location": [ - 33.5, - -112.11 - ] - }, - { - "City": "Pittsburgh", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 1540, - "Pop1955": 1670, - "Pop1960": 1800, - "Pop1965": 1830, - "Pop1970": 1840, - "Pop1975": 1830, - "Pop1980": 1810, - "Pop1985": 1740, - "Pop1990": 1680, - "Pop1995": 1720, - "Pop2000": 1760, - "Pop2005": 1810, - "Pop2010": 1840, - "Pop2015": 1890, - "Pop2020": 1970, - "Pop2025": 2040, - "Pop2050": 2105, - "Location": [ - 40.49, - -79.99 - ] - }, - { - "City": "Portland", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 520, - "Pop1955": 580, - "Pop1960": 660, - "Pop1965": 740, - "Pop1970": 830, - "Pop1975": 920, - "Pop1980": 1030, - "Pop1985": 1100, - "Pop1990": 1180, - "Pop1995": 1370, - "Pop2000": 1600, - "Pop2005": 1810, - "Pop2010": 1880, - "Pop2015": 1950, - "Pop2020": 2040, - "Pop2025": 2110, - "Pop2050": 2172, - "Location": [ - 45.44, - -122.64 - ] - }, - { - "City": "Providence", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 700, - "Pop1955": 740, - "Pop1960": 790, - "Pop1965": 860, - "Pop1970": 940, - "Pop1975": 960, - "Pop1980": 990, - "Pop1985": 1020, - "Pop1990": 1050, - "Pop1995": 1110, - "Pop2000": 1180, - "Pop2005": 1250, - "Pop2010": 1280, - "Pop2015": 1320, - "Pop2020": 1380, - "Pop2025": 1440, - "Pop2050": 1481, - "Location": [ - 41.81, - -71.42 - ] - }, - { - "City": "Richmond", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 260, - "Pop1955": 300, - "Pop1960": 340, - "Pop1965": 420, - "Pop1970": 520, - "Pop1975": 560, - "Pop1980": 600, - "Pop1985": 650, - "Pop1990": 700, - "Pop1995": 760, - "Pop2000": 820, - "Pop2005": 890, - "Pop2010": 910, - "Pop2015": 940, - "Pop2020": 990, - "Pop2025": 1030, - "Pop2050": 1069, - "Location": [ - 37.56, - -77.47 - ] - }, - { - "City": "Riverside-San Bernardino", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 140, - "Pop1955": 230, - "Pop1960": 380, - "Pop1965": 470, - "Pop1970": 590, - "Pop1975": 640, - "Pop1980": 710, - "Pop1985": 920, - "Pop1990": 1180, - "Pop1995": 1340, - "Pop2000": 1520, - "Pop2005": 1690, - "Pop2010": 1740, - "Pop2015": 1810, - "Pop2020": 1890, - "Pop2025": 1960, - "Pop2050": 2021, - "Location": [ - 34.12, - -117.29 - ] - }, - { - "City": "Rochester", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 410, - "Pop1955": 450, - "Pop1960": 500, - "Pop1965": 550, - "Pop1970": 600, - "Pop1975": 600, - "Pop1980": 610, - "Pop1985": 610, - "Pop1990": 620, - "Pop1995": 660, - "Pop2000": 700, - "Pop2005": 740, - "Pop2010": 760, - "Pop2015": 780, - "Pop2020": 820, - "Pop2025": 860, - "Pop2050": 887, - "Location": [ - 43.21, - -77.63 - ] - }, - { - "City": "Sacramento", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 220, - "Pop1955": 320, - "Pop1960": 460, - "Pop1965": 540, - "Pop1970": 640, - "Pop1975": 710, - "Pop1980": 800, - "Pop1985": 940, - "Pop1990": 1100, - "Pop1995": 1240, - "Pop2000": 1400, - "Pop2005": 1560, - "Pop2010": 1600, - "Pop2015": 1660, - "Pop2020": 1740, - "Pop2025": 1800, - "Pop2050": 1860, - "Location": [ - 38.56, - -121.42 - ] - }, - { - "City": "Salt Lake City", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 230, - "Pop1955": 280, - "Pop1960": 350, - "Pop1965": 410, - "Pop1970": 480, - "Pop1975": 570, - "Pop1980": 680, - "Pop1985": 730, - "Pop1990": 790, - "Pop1995": 840, - "Pop2000": 890, - "Pop2005": 940, - "Pop2010": 970, - "Pop2015": 1000, - "Pop2020": 1050, - "Pop2025": 1090, - "Pop2050": 1128, - "Location": [ - 40.69, - -111.89 - ] - }, - { - "City": "San Antonio", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 450, - "Pop1955": 540, - "Pop1960": 640, - "Pop1965": 710, - "Pop1970": 780, - "Pop1975": 860, - "Pop1980": 950, - "Pop1985": 1040, - "Pop1990": 1130, - "Pop1995": 1230, - "Pop2000": 1330, - "Pop2005": 1440, - "Pop2010": 1470, - "Pop2015": 1520, - "Pop2020": 1590, - "Pop2025": 1660, - "Pop2050": 1706, - "Location": [ - 29.42, - -98.52 - ] - }, - { - "City": "San Diego", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 440, - "Pop1955": 610, - "Pop1960": 840, - "Pop1965": 1010, - "Pop1970": 1210, - "Pop1975": 1440, - "Pop1980": 1720, - "Pop1985": 2020, - "Pop1990": 2360, - "Pop1995": 2510, - "Pop2000": 2680, - "Pop2005": 2850, - "Pop2010": 2920, - "Pop2015": 3000, - "Pop2020": 3130, - "Pop2025": 3230, - "Pop2050": 3315, - "Location": [ - 32.76, - -117.12 - ] - }, - { - "City": "San Francisco-Oakland", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 1860, - "Pop1955": 2020, - "Pop1960": 2200, - "Pop1965": 2360, - "Pop1970": 2530, - "Pop1975": 2590, - "Pop1980": 2660, - "Pop1985": 2800, - "Pop1990": 2960, - "Pop1995": 3100, - "Pop2000": 3240, - "Pop2005": 3390, - "Pop2010": 3450, - "Pop2015": 3540, - "Pop2020": 3680, - "Pop2025": 3800, - "Pop2050": 3898, - "Location": [ - 37.79, - -122.38 - ] - }, - { - "City": "San Jose", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 180, - "Pop1955": 340, - "Pop1960": 610, - "Pop1965": 790, - "Pop1970": 1010, - "Pop1975": 1100, - "Pop1980": 1200, - "Pop1985": 1290, - "Pop1990": 1380, - "Pop1995": 1460, - "Pop2000": 1540, - "Pop2005": 1630, - "Pop2010": 1670, - "Pop2015": 1720, - "Pop2020": 1800, - "Pop2025": 1860, - "Pop2050": 1921, - "Location": [ - 37.3, - -121.84 - ] - }, - { - "City": "Seattle", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 800, - "Pop1955": 930, - "Pop1960": 1090, - "Pop1965": 1300, - "Pop1970": 1560, - "Pop1975": 1660, - "Pop1980": 1780, - "Pop1985": 1980, - "Pop1990": 2210, - "Pop1995": 2450, - "Pop2000": 2730, - "Pop2005": 2990, - "Pop2010": 3070, - "Pop2015": 3170, - "Pop2020": 3300, - "Pop2025": 3420, - "Pop2050": 3503, - "Location": [ - 47.58, - -122.31 - ] - }, - { - "City": "St. Louis", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 1410, - "Pop1955": 1540, - "Pop1960": 1670, - "Pop1965": 1780, - "Pop1970": 1880, - "Pop1975": 1860, - "Pop1980": 1850, - "Pop1985": 1900, - "Pop1990": 1950, - "Pop1995": 2010, - "Pop2000": 2080, - "Pop2005": 2160, - "Pop2010": 2200, - "Pop2015": 2260, - "Pop2020": 2360, - "Pop2025": 2440, - "Pop2050": 2510, - "Location": [ - 38.63, - -90.34 - ] - }, - { - "City": "Tampa-St. Petersburg", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 300, - "Pop1955": 440, - "Pop1960": 630, - "Pop1965": 740, - "Pop1970": 870, - "Pop1975": 1090, - "Pop1980": 1360, - "Pop1985": 1530, - "Pop1990": 1720, - "Pop1995": 1890, - "Pop2000": 2070, - "Pop2005": 2250, - "Pop2010": 2310, - "Pop2015": 2390, - "Pop2020": 2490, - "Pop2025": 2580, - "Pop2050": 2652, - "Location": [ - 27.99, - -82.59 - ] - }, - { - "City": "Tucson", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 80, - "Pop1955": 130, - "Pop1960": 230, - "Pop1965": 260, - "Pop1970": 300, - "Pop1975": 370, - "Pop1980": 450, - "Pop1985": 510, - "Pop1990": 580, - "Pop1995": 650, - "Pop2000": 720, - "Pop2005": 800, - "Pop2010": 820, - "Pop2015": 850, - "Pop2020": 900, - "Pop2025": 940, - "Pop2050": 969, - "Location": [ - 32.22, - -110.92 - ] - }, - { - "City": "Virginia Beach", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 390, - "Pop1955": 530, - "Pop1960": 720, - "Pop1965": 820, - "Pop1970": 930, - "Pop1975": 1000, - "Pop1980": 1070, - "Pop1985": 1170, - "Pop1990": 1290, - "Pop1995": 1340, - "Pop2000": 1400, - "Pop2005": 1460, - "Pop2010": 1490, - "Pop2015": 1540, - "Pop2020": 1610, - "Pop2025": 1670, - "Pop2050": 1719, - "Location": [ - 36.83, - -76.08 - ] - }, - { - "City": "Washington, D.C.", - "Country": "United States of America", - "Country_ISO3": "USA", - "Pop1950": 1300, - "Pop1955": 1540, - "Pop1960": 1820, - "Pop1965": 2140, - "Pop1970": 2490, - "Pop1975": 2630, - "Pop1980": 2780, - "Pop1985": 3060, - "Pop1990": 3380, - "Pop1995": 3650, - "Pop2000": 3950, - "Pop2005": 4240, - "Pop2010": 4340, - "Pop2015": 4460, - "Pop2020": 4640, - "Pop2025": 4780, - "Pop2050": 4889, - "Location": [ - 38.89, - -76.95 - ] - }, - { - "City": "Ouagadougou", - "Country": "Burkina Faso", - "Country_ISO3": "BFA", - "Pop1950": 30, - "Pop1955": 50, - "Pop1960": 60, - "Pop1965": 80, - "Pop1970": 110, - "Pop1975": 150, - "Pop1980": 260, - "Pop1985": 420, - "Pop1990": 540, - "Pop1995": 670, - "Pop2000": 830, - "Pop2005": 1040, - "Pop2010": 1150, - "Pop2015": 1320, - "Pop2020": 1680, - "Pop2025": 2110, - "Pop2050": 2632, - "Location": [ - 12.48, - -1.67 - ] - }, - { - "City": "Montevideo", - "Country": "Uruguay", - "Country_ISO3": "URY", - "Pop1950": 1210, - "Pop1955": 1250, - "Pop1960": 1280, - "Pop1965": 1320, - "Pop1970": 1360, - "Pop1975": 1400, - "Pop1980": 1450, - "Pop1985": 1510, - "Pop1990": 1550, - "Pop1995": 1580, - "Pop2000": 1560, - "Pop2005": 1520, - "Pop2010": 1510, - "Pop2015": 1500, - "Pop2020": 1510, - "Pop2025": 1520, - "Pop2050": 1520, - "Location": [ - -34.92, - -56.16 - ] - }, - { - "City": "Tashkent", - "Country": "Uzbekistan", - "Country_ISO3": "UZB", - "Pop1950": 760, - "Pop1955": 840, - "Pop1960": 960, - "Pop1965": 1160, - "Pop1970": 1400, - "Pop1975": 1610, - "Pop1980": 1820, - "Pop1985": 1960, - "Pop1990": 2100, - "Pop1995": 2120, - "Pop2000": 2140, - "Pop2005": 2160, - "Pop2010": 2180, - "Pop2015": 2250, - "Pop2020": 2420, - "Pop2025": 2640, - "Pop2050": 2892, - "Location": [ - 41.24, - 69.34 - ] - }, - { - "City": "Barquisimeto", - "Country": "Venezuela (Bolivarian Republic of)", - "Country_ISO3": "VEN", - "Pop1950": 130, - "Pop1955": 170, - "Pop1960": 240, - "Pop1965": 300, - "Pop1970": 380, - "Pop1975": 480, - "Pop1980": 580, - "Pop1985": 670, - "Pop1990": 740, - "Pop1995": 840, - "Pop2000": 950, - "Pop2005": 1070, - "Pop2010": 1120, - "Pop2015": 1180, - "Pop2020": 1280, - "Pop2025": 1360, - "Pop2050": 1420, - "Location": [ - 10.06, - -69.33 - ] - }, - { - "City": "Caracas", - "Country": "Venezuela (Bolivarian Republic of)", - "Country_ISO3": "VEN", - "Pop1950": 690, - "Pop1955": 960, - "Pop1960": 1320, - "Pop1965": 1660, - "Pop1970": 2060, - "Pop1975": 2340, - "Pop1980": 2580, - "Pop1985": 2690, - "Pop1990": 2770, - "Pop1995": 2820, - "Pop2000": 2860, - "Pop2005": 2930, - "Pop2010": 2980, - "Pop2015": 3100, - "Pop2020": 3310, - "Pop2025": 3480, - "Pop2050": 3619, - "Location": [ - 10.49, - -66.89 - ] - }, - { - "City": "Maracaibo", - "Country": "Venezuela (Bolivarian Republic of)", - "Country_ISO3": "VEN", - "Pop1950": 280, - "Pop1955": 370, - "Pop1960": 480, - "Pop1965": 570, - "Pop1970": 670, - "Pop1975": 790, - "Pop1980": 920, - "Pop1985": 1100, - "Pop1990": 1300, - "Pop1995": 1500, - "Pop2000": 1720, - "Pop2005": 1980, - "Pop2010": 2070, - "Pop2015": 2200, - "Pop2020": 2370, - "Pop2025": 2500, - "Pop2050": 2606, - "Location": [ - 10.64, - -71.63 - ] - }, - { - "City": "Maracay", - "Country": "Venezuela (Bolivarian Republic of)", - "Country_ISO3": "VEN", - "Pop1950": 60, - "Pop1955": 80, - "Pop1960": 110, - "Pop1965": 160, - "Pop1970": 250, - "Pop1975": 340, - "Pop1980": 460, - "Pop1985": 590, - "Pop1990": 760, - "Pop1995": 830, - "Pop2000": 900, - "Pop2005": 970, - "Pop2010": 1010, - "Pop2015": 1060, - "Pop2020": 1140, - "Pop2025": 1210, - "Pop2050": 1271, - "Location": [ - 10.24, - -67.59 - ] - }, - { - "City": "Valencia", - "Country": "Venezuela (Bolivarian Republic of)", - "Country_ISO3": "VEN", - "Pop1950": 130, - "Pop1955": 160, - "Pop1960": 210, - "Pop1965": 300, - "Pop1970": 410, - "Pop1975": 550, - "Pop1980": 710, - "Pop1985": 870, - "Pop1990": 1050, - "Pop1995": 1180, - "Pop2000": 1370, - "Pop2005": 1660, - "Pop2010": 1770, - "Pop2015": 1900, - "Pop2020": 2060, - "Pop2025": 2170, - "Pop2050": 2266, - "Location": [ - 10.17, - -68 - ] - }, - { - "City": "Al-Hudaydah", - "Country": "Yemen", - "Country_ISO3": "YEM", - "Pop1950": 30, - "Pop1955": 30, - "Pop1960": 40, - "Pop1965": 60, - "Pop1970": 70, - "Pop1975": 90, - "Pop1980": 120, - "Pop1985": 150, - "Pop1990": 210, - "Pop1995": 310, - "Pop2000": 460, - "Pop2005": 670, - "Pop2010": 780, - "Pop2015": 950, - "Pop2020": 1230, - "Pop2025": 1530, - "Pop2050": 1854, - "Location": [ - 14.79, - 42.94 - ] - }, - { - "City": "Sana'a'", - "Country": "Yemen", - "Country_ISO3": "YEM", - "Pop1950": 50, - "Pop1955": 60, - "Pop1960": 70, - "Pop1965": 90, - "Pop1970": 110, - "Pop1975": 140, - "Pop1980": 240, - "Pop1985": 400, - "Pop1990": 650, - "Pop1995": 1030, - "Pop2000": 1360, - "Pop2005": 1800, - "Pop2010": 2010, - "Pop2015": 2340, - "Pop2020": 2960, - "Pop2025": 3640, - "Pop2050": 4382, - "Location": [ - 15.36, - 44.2 - ] - }, - { - "City": "Ta'izz", - "Country": "Yemen", - "Country_ISO3": "YEM", - "Pop1950": 20, - "Pop1955": 30, - "Pop1960": 40, - "Pop1965": 50, - "Pop1970": 60, - "Pop1975": 90, - "Pop1980": 120, - "Pop1985": 170, - "Pop1990": 230, - "Pop1995": 330, - "Pop2000": 460, - "Pop2005": 660, - "Pop2010": 750, - "Pop2015": 900, - "Pop2020": 1160, - "Pop2025": 1440, - "Pop2050": 1743, - "Location": [ - 13.57, - 44.01 - ] - }, - { - "City": "Lusaka", - "Country": "Zambia", - "Country_ISO3": "ZMB", - "Pop1950": 30, - "Pop1955": 50, - "Pop1960": 90, - "Pop1965": 160, - "Pop1970": 280, - "Pop1975": 380, - "Pop1980": 530, - "Pop1985": 640, - "Pop1990": 760, - "Pop1995": 900, - "Pop2000": 1070, - "Pop2005": 1260, - "Pop2010": 1330, - "Pop2015": 1420, - "Pop2020": 1590, - "Pop2025": 1800, - "Pop2050": 2047, - "Location": [ - -15.42, - 28.17 - ] - } - ] - \ No newline at end of file diff --git a/docs/knowledge-base/examples/map/link-markers/app.tsx b/docs/knowledge-base/examples/map/link-markers/app.tsx deleted file mode 100644 index 175f519a..00000000 --- a/docs/knowledge-base/examples/map/link-markers/app.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import * as React from 'react'; -import { Path } from '@progress/kendo-drawing'; -import { - Map, - MapLayers, - MapShapeLayer, - MapTileLayer, - MapMarker, - MapMarkerLayer, - ResetEvent, - TileUrlTemplateArgs -} from '@progress/kendo-react-map'; - -const center = [20.69, -70.96]; -const zoom = 7; - -const tileSubdomains = ['a', 'b', 'c']; -const tileUrl = (e: TileUrlTemplateArgs) => `https://${e.subdomain}.tile.openstreetmap.org/${e.zoom}/${e.x}/${e.y}.png`; -const attribution = '© OpenStreetMap contributors'; - -const markers = [{ - location: [20.69, -70.96], - title: "Foo", - pointTo: [18.89, -72.19] -}]; - -const linkMarker = (map: Map, marker: MapMarker) => { - const data = marker.dataItem; - if (data.pointTo) { - // Convert the latitude and longitude locations to coordinates on the screen. - const from = map.locationToView(marker.location()); - const to = map.locationToView(data.pointTo); - - // Draw a path on the shape layer. - const layer = map.layers[1]; - const line = new Path({ - stroke: { - color: "#fcc", - width: 6, - lineCap: 'round' - } - }); - line.moveTo(from).lineTo(to); - - layer.surface.draw(line); - } -} - -const reset = (args: ResetEvent) => { - const map = args.target; - const layer = map.layers[2]; - - for (let marker of layer.items) { - linkMarker(map, marker); - } -}; - -const App = () => ( - - - - - - - -); - -export default App; diff --git a/docs/knowledge-base/examples/map/link-markers/main.tsx b/docs/knowledge-base/examples/map/link-markers/main.tsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/map/link-markers/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-color-tags/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-color-tags/app.jsx deleted file mode 100644 index d99967e3..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-color-tags/app.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import * as React from 'react'; -import { MultiSelect } from '@progress/kendo-react-dropdowns'; - -const sizes = [ - 'X-Small - Event', - 'Small - Visit', - 'Medium - Visit', - 'Large - Event', - 'X-Large - Visit', - '2X-Large - Event', -]; - -const App = () => { - const [value, setValue] = React.useState([]); - - const handleChange = (event) => { - setValue(event.target.value); - }; - - const tagRender = (tagData, li) => { - const tagText = tagData.data[0]; - let backgroundColor = ''; - - if (tagText.includes('Event')) { - backgroundColor = 'red'; - } else if (tagText.includes('Visit')) { - backgroundColor = '#599e0e'; - } - - const tagStyle = { - backgroundColor: backgroundColor, - display: 'inline-block', - padding: '2px 8px', - borderRadius: '4px', - color: '#fff', - }; - - return React.cloneElement( - li, - { - ...li.props, - style: { - ...li.props.style, - backgroundColor: backgroundColor, - }, - }, - [ - - {tagText} - , - li.props.children, - ] - ); - }; - return ( -
    -
    T-shirt sizes:
    - -
    - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-color-tags/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-color-tags/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-color-tags/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-disable-items/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-disable-items/app.jsx deleted file mode 100644 index 1147830e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-disable-items/app.jsx +++ /dev/null @@ -1,65 +0,0 @@ -import * as React from 'react'; - -import { MultiSelect } from '@progress/kendo-react-dropdowns'; -import countries from './shared-countries'; -const App = () => { - const [open, setOpen] = React.useState(true); - const itemRender = (li, itemProps) => { - const index = itemProps.index; - const itemChildren = {li.props.children}; - return ( -
  • - {itemChildren} -
  • - ); - }; - const handleClose = (event) => { - console.log(event.syntheticEvent.target.classList); - if (!(event.syntheticEvent.target.classList[0] === 'k-list-ul')) { - setOpen(false); - } - }; - const handleBlur = () => { - console.log('blur'); - setOpen(false); - }; - - const handleOpen = () => { - setOpen(true); - }; - - return ( -
    -

    Select European countries:

    - - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/multiselect/multiselect-disable-items/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-disable-items/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-disable-items/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-limit-input/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-limit-input/app.jsx deleted file mode 100644 index 154bde9e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-limit-input/app.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { MultiSelect } from "@progress/kendo-react-dropdowns"; -import { filterBy } from "@progress/kendo-data-query"; -import countries from "./shared-countries"; - -const App = () => { - const [data, setData] = useState(countries.slice()); - const [value, setValue] = useState(""); - - const onFilterChange = (event) => { - setData(filterBy(countries.slice(), event.filter)); - setValue(event.filter.value); - }; - - useEffect(() => { - const input = document.getElementsByClassName("k-input-inner"); - input[0].setAttribute("maxlength", 2); - }, []); - - return ( -
    -
    Select country:
    - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/multiselect/multiselect-limit-input/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-limit-input/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-limit-input/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/app.jsx deleted file mode 100644 index cc3b13ba..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/app.jsx +++ /dev/null @@ -1,71 +0,0 @@ -import * as React from 'react'; -import { MultiSelect } from '@progress/kendo-react-dropdowns'; -import { Sortable } from '@progress/kendo-react-sortable'; -import './styles.css'; -const sizes = [ - { text: 'X-Small', id: 1 }, - { text: 'Small', id: 2 }, - { text: 'Medium', id: 3 }, - { text: 'Large', id: 4 }, -]; - -//Custom tags that will be displayed over the MultiSelect input -const SortableItemUI = (props) => { - const { isDisabled, isActive, style, attributes, dataItem, forwardRef } = - props; - - return ( -
  • - {dataItem.text} -
  • - ); -}; - -const App = () => { - const [value, setValue] = React.useState([ - { text: 'X-Small', id: 1 }, - { text: 'Small', id: 2 }, - { text: 'Medium', id: 3 }, - ]); - - const handleChange = (event) => { - setValue(event.target.value); - }; - - const onDragOver = (event) => { - setValue(event.newState); - }; - - const onNavigate = (event) => { - setValue(event.newState); - }; - - return ( -
    -
    Selected values: {value.map(i=>i.text).join(",")}
    -
    -
      - {' '} - -
    -
    - } //removeing original tags - /> -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/styles.css b/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/styles.css deleted file mode 100644 index 9f7810d2..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-reorder-tags/styles.css +++ /dev/null @@ -1,13 +0,0 @@ -.sortableDiv { - padding-left: 3px; - position: relative; - top: 25px; - z-index: 10; - display: inline-block; - } - - .sortableDiv .k-button { - height: 21px; - padding: 0 20px; - } - \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/class/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/class/app.jsx deleted file mode 100644 index c8f22a02..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/class/app.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import { MultiSelect } from '@progress/kendo-react-dropdowns'; -import countries from './shared-countries'; -class AppComponent extends React.Component { - state = { value: [], allSelected: true }; - - handleChange = (event) => { - const currentSelectAll = this.state.value.some((i) => i === 'Select All'); - const nextSelectAll = event.value.some((i) => i === 'Select All'); - let value = event.value; - const currentCount = this.state.value.length; - const nextCount = value.length; - - if ( - nextCount > currentCount && - !currentSelectAll && - !nextSelectAll && - countries.length - 1 === nextCount - ) { - value = countries; - } else if ( - nextCount < currentCount && - currentCount === countries.length && - currentSelectAll && - nextSelectAll - ) { - value = value.filter((v) => v !== 'Select All'); - } else if (!currentSelectAll && nextSelectAll) { - value = countries; - } else if (currentSelectAll && !nextSelectAll) { - value = []; - } - - this.setState({ value }); - }; - - itemRender = (li, itemProps) => { - const itemChildren = ( - - itemProps.onClick(itemProps.index, e)} - /> -  {li.props.children} - - ); - return React.cloneElement(li, li.props, itemChildren); - }; - - render() { - const value = this.state.value; - const selected = value.length; - return ( -
    -

    Select European countries:

    - 0 - ? [{ text: `${selected} items selected`, data: [...value] }] - : [] - } - /> -
    - ); - } -} - -export default AppComponent; \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/class/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/class/main.jsx deleted file mode 100644 index 80a0d7bf..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/class/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import AppComponent from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/func/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/func/app.jsx deleted file mode 100644 index 819b2570..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/func/app.jsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; -import { MultiSelect } from '@progress/kendo-react-dropdowns'; -import countries from './shared-countries'; - -const App = () => { - const [state, setState] = React.useState({ value: [], allSelected: true }); - - const handleChange = (event) => { - const currentSelectAll = state.value.some((i) => i === 'Select All'); - const nextSelectAll = event.value.some((i) => i === 'Select All'); - let value = event.value; - const currentCount = state.value.length; - const nextCount = value.length; - - if ( - nextCount > currentCount && - !currentSelectAll && - !nextSelectAll && - countries.length - 1 === nextCount - ) { - value = countries; - } else if ( - nextCount < currentCount && - currentCount === countries.length && - currentSelectAll && - nextSelectAll - ) { - value = value.filter((v) => v !== 'Select All'); - } else if (!currentSelectAll && nextSelectAll) { - value = countries; - } else if (currentSelectAll && !nextSelectAll) { - value = []; - } - - setState({ value }); - }; - - const itemRender = (li, itemProps) => { - const itemChildren = ( - - itemProps.onClick(itemProps.index, e)} - /> -  {li.props.children} - - ); - return React.cloneElement(li, li.props, itemChildren); - }; - const value = state.value; - const selected = value.length; - return ( -
    -

    Select European countries:

    - 0 - ? [{ text: `${selected} items selected`, data: [...value] }] - : [] - } - /> -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/func/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/func/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-select-all-checkbox/func/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-set-maximum-selection/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-set-maximum-selection/app.jsx deleted file mode 100644 index 3f8200e3..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-set-maximum-selection/app.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React, { useState, useEffect } from 'react'; - -import { MultiSelect } from '@progress/kendo-react-dropdowns'; - -const sizes = ['X-Small', 'Small', 'Medium', 'Large', 'X-Large', '2X-Large']; - -const App = () => { - const [value, setValue] = useState([]); - - const handleChange = (event) => { - setValue(event.target.value.slice(0, 2)); - }; - - return ( -
    -
    T-shirt sizes:
    - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/multiselect/multiselect-set-maximum-selection/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-set-maximum-selection/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-set-maximum-selection/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselect/multiselect-tags-and-tagrender/app.jsx b/docs/knowledge-base/examples/multiselect/multiselect-tags-and-tagrender/app.jsx deleted file mode 100644 index 411f1459..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-tags-and-tagrender/app.jsx +++ /dev/null @@ -1,84 +0,0 @@ -import * as React from 'react'; - -import { MultiSelect } from '@progress/kendo-react-dropdowns'; -const sizes = ['X-Small', 'Small', 'Medium']; -const App = () => { - const [value, setValue] = React.useState([]); - const selected = value.length; - const [tags, setTags] = React.useState([ - { - text: `${selected} tasks`, - data: [...value], - }, - ]); - - const tagRender = (tagData, li) => { - let icon; - if (tagData.text === 'X-Small') { - icon = ; - } else if (tagData.text === 'Small') { - icon = ; - } else if (tagData.text === 'Medium') { - icon = ; - } else { - icon = null; - } - return React.cloneElement(li, li.props, [ - - {icon ? icon : tagData.text} - , - li.props.children, - ]); - }; - - const handleChange = React.useCallback( - (event) => { - const close = event.syntheticEvent.target.classList[0] === 'k-icon'; - if (!(event.value.length < value.length) && !close) { - tags[0].text = `${event.value.length} task`; - setTags((tags) => [ - ...tags, - { - text: `${event.value[event.value.length - 1]}`, - data: [...value], - }, - ]); - } else { - const deletedEl = event.nativeEvent.target.outerText; - setTags((tags) => tags.filter((tag) => tag.text !== deletedEl)); - } - - setValue(event.value); - }, - [tags] - ); - - return ( -
    - -
    T-shirt sizes:
    - - -
    - ); -}; -export default App; diff --git a/docs/knowledge-base/examples/multiselect/multiselect-tags-and-tagrender/main.jsx b/docs/knowledge-base/examples/multiselect/multiselect-tags-and-tagrender/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselect/multiselect-tags-and-tagrender/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/app.jsx b/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/app.jsx deleted file mode 100644 index a3498787..00000000 --- a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/app.jsx +++ /dev/null @@ -1,96 +0,0 @@ -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import { - MultiSelectTree, - getMultiSelectTreeValue, -} from '@progress/kendo-react-dropdowns'; -import { - processMultiSelectTreeData, - expandedState, -} from './multiselecttree-data-operations'; -import { data } from './tree-data'; -const dataItemKey = 'id'; -const checkField = 'checkField'; -const checkIndeterminateField = 'checkIndeterminateField'; -const subItemsField = 'items'; -const expandField = 'expanded'; -const textField = 'text'; -const fields = { - dataItemKey, - checkField, - checkIndeterminateField, - expandField, - subItemsField, -}; -import './style.css'; -const LoadingPanel = () => { - const loadingPanel = ( -
    - Loading -
    -
    -
    - ); - const multiselecttree = - document && document.querySelector('.k-multiselecttree'); - return multiselecttree - ? ReactDOM.createPortal(loadingPanel, multiselecttree) - : loadingPanel; -}; -const App = () => { - const [value, setValue] = React.useState([]); - const [loading, setLoading] = React.useState(false); - const [expanded, setExpanded] = React.useState([data[0][dataItemKey]]); - const onChange = (event) => - setValue( - getMultiSelectTreeValue(data, { - ...fields, - ...event, - value, - }) - ); - const onExpandChange = React.useCallback( - (event) => { - setLoading(true); - // simulate a server call - setTimeout(() => { - setExpanded(expandedState(event.item, dataItemKey, expanded)); - setLoading(false); - }, 1000); - }, - [expanded] - ); - const treeData = React.useMemo( - () => - processMultiSelectTreeData(data, { - expanded, - value, - ...fields, - }), - [expanded, value] - ); - return ( - <> - - {loading && } - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/main.jsx b/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/multiselecttree-data-operations.js b/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/multiselecttree-data-operations.js deleted file mode 100644 index 263f32cf..00000000 --- a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/multiselecttree-data-operations.js +++ /dev/null @@ -1,85 +0,0 @@ -import { filterBy } from '@progress/kendo-react-data-tools'; -import { getter, setter } from '@progress/kendo-react-common'; -export const getValueMap = (value, idGetter) => { - const map = {}; - if (value && value.length) { - value.forEach(item => { - map[idGetter(item)] = true; - }); - } - return map; -}; -export const expandedState = (item, dataItemKey, expanded) => { - const nextExpanded = expanded.slice(); - const keyGetter = getter(dataItemKey); - const itemKey = keyGetter(item); - const index = expanded.findIndex(currentKey => { - return currentKey === itemKey; - }); - index === -1 ? nextExpanded.push(itemKey) : nextExpanded.splice(index, 1); - return nextExpanded; -}; -const mapMultiSelectTreeData = (data, options) => { - const { - keyGetter, - subItemGetter, - subItemSetter, - checkSetter, - expandedSetter, - checkIndeterminateSetter, - valueMap, - expandedMap - } = options; - if (!data || !data.length) { - return [data, false]; - } - let hasChecked = false; - const newData = [...data].map(dataItem => { - const [children, hasCheckedChildren] = mapMultiSelectTreeData(subItemGetter(dataItem), options); - const isChecked = valueMap[keyGetter(dataItem)]; - if (isChecked || hasCheckedChildren) { - hasChecked = true; - } - const newItem = { - ...dataItem - }; - expandedSetter(newItem, expandedMap[keyGetter(newItem)]); - subItemSetter(newItem, children); - checkSetter(newItem, isChecked); - checkIndeterminateSetter(newItem, !isChecked && hasCheckedChildren); - return newItem; - }); - return [newData, hasChecked]; -}; - -/** - * Creates a new array with the results of calling the provided callback function - * on every element in the provided data tree. The new tree items have their `check` and `checkIndeterminate` fields set. - */ -export const processMultiSelectTreeData = (tree, options) => { - const { - subItemsField = 'items', - checkField = 'checkField', - checkIndeterminateField = 'checkIndeterminateField', - expandField = 'expanded', - dataItemKey, - value, - filter, - expanded - } = options; - const keyGetter = getter(dataItemKey); - const filtering = Boolean(filter && filter.value); - const expandedMap = {}; - expanded.forEach(id => expandedMap[id] = true); - const [result] = mapMultiSelectTreeData(tree, { - valueMap: getValueMap(value, keyGetter), - expandedMap: expandedMap, - keyGetter, - expandedSetter: setter(expandField), - subItemGetter: getter(subItemsField), - subItemSetter: setter(subItemsField), - checkSetter: setter(checkField), - checkIndeterminateSetter: setter(checkIndeterminateField) - }); - return filtering ? filterBy(result, [filter], subItemsField) : result; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/style.css b/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/style.css deleted file mode 100644 index 5b260a25..00000000 --- a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/style.css +++ /dev/null @@ -1,95 +0,0 @@ -.orders-demo.card-container { - margin-top: 20px; - display: flex; - justify-content: center; -} - -.orders-demo .custom-card-header { - min-width: 48px; -} - -.orders-demo .custom-card-header .k-skeleton { - opacity: 1; -} - -.orders-demo .custom-card-header-action { - width: 20px; - height: 20px; -} - -.orders-demo .custom-card { - width: 712px; - height: 350px; - border-radius: 4px 4px 0 0; - box-shadow: 0 0 12px 4px rgba(0, 0, 0, 0.08); -} - -.orders-demo .k-skeleton { - opacity: 0.4; -} - -.orders-demo .k-h4, -.orders-demo .k-i-chart-pie { - opacity: 0.2; -} - -.orders-demo .k-i-chart-pie { - font-size: 52px; -} - -.orders-demo .skeleton-text-small { - width: 124px; - height: 15px; -} - -.orders-demo .skeleton-text-medium { - height: 30px; -} - -.orders-demo .skeleton-text-large { - height: 88px; -} - -.orders-demo .padding-top-5 { - padding-top: 5px; -} - -.contact-image { - width: 20px; - height: 20px; - margin-right: 8px; - border-radius: 50%; -} - -@media only screen and (max-width: 559px) { - .orders-demo .card-image-column { - display: none !important; - } -} - -@media only screen and (max-width: 359px) { - .orders-demo .custom-card { - flex-direction: column !important; - height: 358px; - width: 359px; - } - - .orders-demo .card-content { - padding: 16px; - box-sizing: border-box; - } - - .orders-demo .custom-card-header { - width: 100%; - height: 40px; - } - - .orders-demo .card-actions-container { - flex-direction: row; - padding: 10px 16px; - } - - .orders-demo .skeleton-text-large { - height: 64px; - } -} diff --git a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/tree-data.js b/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/tree-data.js deleted file mode 100644 index 4860716a..00000000 --- a/docs/knowledge-base/examples/multiselecttree/multiselecttree-lazy-loading/tree-data.js +++ /dev/null @@ -1,27 +0,0 @@ -export const data = [{ - text: 'Furniture', - id: 1, - items: [{ - text: 'Tables & Chairs', - id: 2 - }, { - text: 'Sofas', - id: 3 - }, { - text: 'Occasional Furniture', - id: 4 - }] - }, { - text: 'Decor', - id: 5, - items: [{ - text: 'Bed Linen', - id: 6 - }, { - text: 'Curtains & Blinds', - id: 7 - }, { - text: 'Carpets', - id: 8 - }] - }]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/notification/hide-after/app.jsx b/docs/knowledge-base/examples/notification/hide-after/app.jsx deleted file mode 100644 index ca60abd7..00000000 --- a/docs/knowledge-base/examples/notification/hide-after/app.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as React from 'react'; -import { Notification, NotificationGroup } from '@progress/kendo-react-notification' -import { Fade } from '@progress/kendo-react-animation' - -class App extends React.Component { - state = { success: false }; - onToggle = flag => { - this.setState({ success: !this.state.success }); - if(!this.state.success){ - setTimeout(()=>{ - this.setState({ success: false }); - },3000) - } - } - - render() { - const { success } = this.state; - - return ( - - - - - - {success && this.setState({ success: false })} - > - Your data has been saved. - } - - - - ); - } -} - -export default App; - diff --git a/docs/knowledge-base/examples/notification/hide-after/main.jsx b/docs/knowledge-base/examples/notification/hide-after/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/notification/hide-after/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/notification/stack-and-hide-after/app.jsx b/docs/knowledge-base/examples/notification/stack-and-hide-after/app.jsx deleted file mode 100644 index 4e79a9f9..00000000 --- a/docs/knowledge-base/examples/notification/stack-and-hide-after/app.jsx +++ /dev/null @@ -1,103 +0,0 @@ -import * as React from "react"; -import { Grid, GridColumn as Column } from "@progress/kendo-react-grid"; -import { - Notification, - NotificationGroup -} from "@progress/kendo-react-notification"; -import { Fade } from "@progress/kendo-react-animation"; - -import products from "./shared-products.json"; - -class App extends React.Component { - state = { - notifications: [], - data: products, - selectedID: null - }; - - hideNotification = dataItem => { - const notificationIndex = this.state.notifications.findIndex( - notification => notification.row == dataItem && notification.show == true - ); - if (notificationIndex !== -1) { - const notUpdated = this.state.notifications[notificationIndex]; - notUpdated.show = false; - const newNotifications = [...this.state.notifications]; - newNotifications[notificationIndex] = notUpdated; - this.setState({ notifications: newNotifications }); - } - }; - - closeNotification = i => { - const notUpdated = this.state.notifications[i]; - notUpdated.show = false; - const newNotifications = [...this.state.notifications]; - newNotifications[i] = notUpdated; - this.setState({ notifications: newNotifications }); - }; - - render() { - const { notifications, selectedID } = this.state; - - return ( -
    - ({ - ...item, - selected: item.ProductID === selectedID - }))} - selectedField="selected" - onRowClick={e => { - this.setState({ - selectedID: e.dataItem.ProductID, - notifications: [ - ...notifications, - { row: e.dataItem.ProductID, show: true } - ] - }), - setTimeout(() => { - this.hideNotification(e.dataItem.ProductID); - }, 4000); - }} - > - - - - - - - - - {notifications.map((notification, i) => { - return ( - notification.show && ( - this.closeNotification(i)} - > - Product Clicked: {this.state.data.map(item => { - if (notification.row == item.ProductID) { - return item.ProductName - } - })} - - ) - ); - })} - {" "} - -
    - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/notification/stack-and-hide-after/main.jsx b/docs/knowledge-base/examples/notification/stack-and-hide-after/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/notification/stack-and-hide-after/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/notification/stack-notifications/app.jsx b/docs/knowledge-base/examples/notification/stack-notifications/app.jsx deleted file mode 100644 index 662b080f..00000000 --- a/docs/knowledge-base/examples/notification/stack-notifications/app.jsx +++ /dev/null @@ -1,64 +0,0 @@ -import * as React from 'react'; - -import { - Notification, - NotificationGroup, -} from '@progress/kendo-react-notification'; -import { Fade } from '@progress/kendo-react-animation'; -import './styles.css'; - -const App = () => { - const [state, setState] = React.useState({ - messages: [], - }); - - const addNotification = (message) => { - let newMessages = state.messages.map((item) => item); - newMessages.push(message); - setState({ messages: newMessages }); - }; - return ( - - - - {state.messages && - state.messages.map((message, index) => { - return ( - - { - let newMessages = state.messages.map((item) => item); - newMessages.splice(index, 1); - setState({ messages: newMessages }); - }} - > - {message} - - - ); - })} - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/notification/stack-notifications/main.jsx b/docs/knowledge-base/examples/notification/stack-notifications/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/notification/stack-notifications/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/notification/stack-notifications/styles.css b/docs/knowledge-base/examples/notification/stack-notifications/styles.css deleted file mode 100644 index 8bb7204a..00000000 --- a/docs/knowledge-base/examples/notification/stack-notifications/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -.k-notification-container { - margin: 6px; -} \ No newline at end of file diff --git a/docs/knowledge-base/examples/popup/close-on-blur/app.jsx b/docs/knowledge-base/examples/popup/close-on-blur/app.jsx deleted file mode 100644 index a7e0b56e..00000000 --- a/docs/knowledge-base/examples/popup/close-on-blur/app.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import * as React from "react"; -import { Popup } from "@progress/kendo-react-popup"; - - -class AppComponent extends React.Component { - anchor = null; - constructor(props) { - super(props); - this.state = { show: false }; - this.contentRef = React.createRef(); - this.blurTimeoutRef = React.createRef(); - } - - onOpen = e => { - this.contentRef.current.focus() - }; - - onFocus = () => { - // the user is still inside the content - clearTimeout(this.blurTimeoutRef.current); - }; - - onBlurTimeout = () => { - // the user is now outside the popup - this.setState({ show: false }); - }; - - onBlur = () => { - clearTimeout(this.blurTimeoutRef.current); - - this.blurTimeoutRef.current = setTimeout(this.onBlurTimeout,200); - }; - - render() { - return ( -
    - - -
    - some content -
    -
    -
    - ); - } - - onClick = () => { - this.setState({ show: !this.state.show }); - }; -} - -export default AppComponent; diff --git a/docs/knowledge-base/examples/popup/close-on-blur/main.jsx b/docs/knowledge-base/examples/popup/close-on-blur/main.jsx deleted file mode 100644 index 80a0d7bf..00000000 --- a/docs/knowledge-base/examples/popup/close-on-blur/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import AppComponent from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/popup/close-on-click-outside/app.jsx b/docs/knowledge-base/examples/popup/close-on-click-outside/app.jsx deleted file mode 100644 index f99a24b0..00000000 --- a/docs/knowledge-base/examples/popup/close-on-click-outside/app.jsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; -import { Popup } from '@progress/kendo-react-popup'; -import { process } from '@progress/kendo-data-query'; - -class AppComponent extends React.Component { - anchor = null; - constructor(props) { - super(props); - this.state = { show: false }; - } - - componentDidMount() { - document.body.addEventListener('click', this.handleBodyClick); - } - - componentWillUnmount() { - document.body.removeEventListener('click', this.handleBodyClick); - } - - handleBodyClick = () => { - if (this.state.show) { - this.setState({ - show: false, - }); - } - }; - - render() { - return ( -
    - - - Popup content. - -
    - ); - } - - onClick = (e) => { - e.stopPropagation(); - this.setState({ show: !this.state.show }); - }; -} - -export default AppComponent; \ No newline at end of file diff --git a/docs/knowledge-base/examples/popup/close-on-click-outside/main.jsx b/docs/knowledge-base/examples/popup/close-on-click-outside/main.jsx deleted file mode 100644 index 80a0d7bf..00000000 --- a/docs/knowledge-base/examples/popup/close-on-click-outside/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import AppComponent from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/radialgauge/app.tsx b/docs/knowledge-base/examples/radialgauge/app.tsx deleted file mode 100644 index 21826245..00000000 --- a/docs/knowledge-base/examples/radialgauge/app.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import * as React from 'react'; - -import { RadialGauge } from '@progress/kendo-react-gauges'; - -const App = () => { - const [value, setValue] = React.useState(0); - - React.useEffect(() => { - setInterval(() => { - setValue(Math.ceil(Math.random() * 100)); - }, 1000); - }, []); - - const radialOptions: any = { - value: value, - shape: 'arrow', - scale: { - minorUnit: 5, - majorUnit: 20, - max: 180, - ranges: [ - { from: 80, to: 120, color: '#ffc700' }, - { from: 120, to: 150, color: '#ff7a00' }, - { from: 150, to: 180, color: '#c20000' }, - ], - }, - }; - - const styles = ` -.gaugeVal { - font-family: Arial, Verdana, Helvetica, sans-serif; - font-size: 18px; - position: relative; - left: 0; - right: 0; - top: -40px; - text-align: center; - color: #f00; -} -`; - - return ( - <> - - -
    - {value}{' '} -
    - - ); -}; - -export default App; \ No newline at end of file diff --git a/docs/knowledge-base/examples/radialgauge/main.tsx b/docs/knowledge-base/examples/radialgauge/main.tsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/radialgauge/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/app.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/app.jsx deleted file mode 100644 index 21f2620f..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/app.jsx +++ /dev/null @@ -1,110 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn as Column } from '@progress/kendo-react-grid'; -import { - DragAndDrop, - useDroppable, - Droppable, -} from '@progress/kendo-react-common'; -import { DraggableRow } from './draggable-row'; -import { DragHandleCell } from './drag-handle-cell'; -import { - Scheduler, - WeekView, - MonthView, -} from '@progress/kendo-react-scheduler'; -import { guid } from '@progress/kendo-react-common'; - -export const ReorderContext = React.createContext({ - dragStart: () => {}, -}); -const App = () => { - const s = [ - { - taskID: 1, - ownerId: 1, - title: 'Fast and furious 6', - }, - { - taskID: 2, - ownerId: 3, - title: 'The Internship', - }, - { - taskID: 3, - ownerId: 2, - title: 'The Perks of Being a Wallflower', - }, - { - taskID: 4, - ownerId: 1, - title: 'The Help', - }, - { - taskID: 5, - ownerId: 2, - title: 'Now You See Me', - }, - ]; - - const [activeItem, setActiveItem] = React.useState(null); - const MyScheduler = React.createRef(); - const [data, setData] = React.useState([]); - const handleDropItem = (e) => { - if (!activeItem) { - return; - } - const target = document.elementFromPoint(e.event.clientX, e.event.clientY); - - const start = target.getAttribute('data-slot-start'); - const end = target.getAttribute('data-slot-end'); - const startDate = new Date(parseInt(start)); - const endDate = new Date(parseInt(end)); - const newEvent = { - id: guid(), - title: activeItem.title, - StartTimezone: null, - start: startDate, - end: endDate, - }; - setData([newEvent, ...data]); - setActiveItem(null); - }; - - const dragStart = (dataItem) => { - setActiveItem(dataItem); - }; - - return ( - - - - - - - - -
    - ( - - )} - > - - - - -
    -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/drag-handle-cell.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/drag-handle-cell.jsx deleted file mode 100644 index c9b26f98..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/drag-handle-cell.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -export const DragHandleCell = (props) => { - return ( - - - - ); -}; diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/draggable-row.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/draggable-row.jsx deleted file mode 100644 index b49470ee..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/draggable-row.jsx +++ /dev/null @@ -1,87 +0,0 @@ -import * as React from 'react'; -import { createPortal } from 'react-dom'; -import { ReorderContext } from './app'; -import { useDraggable } from '@progress/kendo-react-common'; - -export const DraggableRow = (props) => { - const [position, setPosition] = React.useState({ x: 50, y: 50 }); - const [dragged, setDragged] = React.useState(false); - const { dragStart } = React.useContext(ReorderContext); - const element = React.useRef(null); - const hint = React.useRef(null); - - const handlePress = React.useCallback(() => {}, []); - - const handleDragStart = React.useCallback( - (event) => { - setDragged(true); - dragStart(props.dataItem); - }, - [position.x, position.y] - ); - - const handleDrag = React.useCallback((event) => { - setPosition({ - x: event.clientX + 50, - y: event.clientY - 50, - }); - }, []); - - const handleDragEnd = React.useCallback(() => { - setDragged(false); - }, []); - - const handleRelease = React.useCallback(() => { - setPosition({ x: 50, y: 50 }); - }, []); - - useDraggable( - element, - { - onPress: handlePress, - onDragStart: handleDragStart, - onDrag: handleDrag, - onDragEnd: handleDragEnd, - onRelease: handleRelease, - }, - { hint: hint } - ); - - return ( - - {createPortal( - dragged ? ( - - - - -
    - ) : null, - document.body - )} - -
    - ); -}; diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/main.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/products.json b/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/products.json deleted file mode 100644 index 4df1c408..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/draggable/products.json +++ /dev/null @@ -1,1233 +0,0 @@ -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/polyfill/app.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/polyfill/app.jsx deleted file mode 100644 index fc72276c..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/polyfill/app.jsx +++ /dev/null @@ -1,90 +0,0 @@ -import * as React from 'react'; -import { - Scheduler, - WeekView, - MonthView, -} from '@progress/kendo-react-scheduler'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import { guid } from '@progress/kendo-react-common'; - -import gridData from './shared-data'; - -const App = () => { - const MyScheduler = React.createRef(); - const [data, setData] = React.useState([]); - const [dragItem, setDragItem] = React.useState(''); - const [width, setWidth] = React.useState(window.innerWidth); - const [scriptLoadingState, setScriptLoadingState] = React.useState('IDLE'); - - const createScript = () => { - var script = document.createElement('script'); - script.type = 'text/javascript'; - script.src = - 'https://bernardo-castilho.github.io/DragDropTouch/DragDropTouch.js'; - script.onload = function () { - setScriptLoadingState('LOADED'); - }; - - script.onerror = function () { - setScriptLoadingState('FAILED'); - }; - document.body.appendChild(script); - }; - - const handleWindowSizeChange = () => { - setWidth(window.innerWidth); - createScript(); - }; - - const handleDropItem = (e) => { - let start = e.target.getAttribute('data-slot-start'); - let end = e.target.getAttribute('data-slot-end'); - let startDate = new Date(parseInt(start)); - let endDate = new Date(parseInt(end)); - let newEvent = { - id: guid(), - title: dragItem.title, - StartTimezone: null, - start: startDate, - end: endDate, - }; - setData([newEvent, ...data]); - }; - - React.useEffect(() => { - window.addEventListener('resize', handleWindowSizeChange); - let schedulerElement = MyScheduler.current.element; - schedulerElement.addEventListener('drop', handleDropItem); - schedulerElement.addEventListener('dragover', (e) => e.preventDefault()); - }); - - const GridRowRender = (tr, props) => { - const trProps = { - draggable: true, - onDragStart: (e) => { - setDragItem(props.dataItem); - }, - }; - return React.cloneElement(tr, { ...trProps }, tr.props.children); - }; - return ( -
    - - - - -
    - - - - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/polyfill/main.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/polyfill/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid-mobile/polyfill/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid/app.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid/app.jsx deleted file mode 100644 index 1a8e202b..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid/app.jsx +++ /dev/null @@ -1,81 +0,0 @@ -import * as React from 'react'; -import { - Scheduler, - WeekView, - MonthView, -} from '@progress/kendo-react-scheduler'; - -import { Grid, GridColumn } from '@progress/kendo-react-grid'; - -import gridData from './shared-data'; - -const handleDragOver = (e) => { - e.preventDefault(); -}; - -const App = () => { - const MyScheduler = React.useRef(); - const refData = React.useRef(); - const refDragItem = React.useRef(); - const [data, setData] = React.useState([]); - - refData.current = data; - refDragItem.current = null; - - const handleDropItem = React.useCallback((e) => { - let start = e.target.getAttribute('data-slot-start'); - let end = e.target.getAttribute('data-slot-end'); - let startDate = new Date(parseInt(start)); - let endDate = new Date(parseInt(end)); - - let newEvent = { - id: refDragItem.current.taskID, - title: refDragItem.current.title, - StartTimezone: null, - start: startDate, - end: endDate, - }; - const newData = [newEvent, ...refData.current]; - refData.current = newData; - setData(newData); - }, []); - - React.useEffect(() => { - let schedulerElement = MyScheduler.current.element; - schedulerElement.addEventListener('drop', handleDropItem); - schedulerElement.addEventListener('dragover', handleDragOver); - return () => { - schedulerElement.removeEventListener('drop', handleDropItem); - schedulerElement.removeEventListener('dragover', handleDragOver); - }; - }, []); - - const GridRowRender = (tr, props) => { - const trProps = { - draggable: true, - onDragStart: () => { - refDragItem.current = props.dataItem; - }, - }; - return React.cloneElement(tr, { ...trProps }, tr.props.children); - }; - return ( - <> - - - - -
    - - - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-grid/main.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-grid/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-grid/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-listview/app.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-listview/app.jsx deleted file mode 100644 index 73aae571..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-listview/app.jsx +++ /dev/null @@ -1,87 +0,0 @@ -import * as React from 'react'; -import { - Scheduler, - WeekView, - MonthView, -} from '@progress/kendo-react-scheduler'; -import { ListView } from '@progress/kendo-react-listview'; - -import gridData from './shared-data'; - -const handleDragOver = (e) => { - e.preventDefault(); -}; - -const App = () => { - const MyScheduler = React.useRef(); - const refData = React.useRef(); - const refDragItem = React.useRef(); - const [data, setData] = React.useState([]); - - refData.current = data; - refDragItem.current = null; - - const handleDropItem = React.useCallback((e) => { - let start = e.target.getAttribute('data-slot-start'); - let end = e.target.getAttribute('data-slot-end'); - let startDate = new Date(parseInt(start)); - let endDate = new Date(parseInt(end)); - - let newEvent = { - id: refDragItem.current.taskID, - title: refDragItem.current.title, - StartTimezone: null, - start: startDate, - end: endDate, - }; - const newData = [newEvent, ...refData.current]; - refData.current = newData; - setData(newData); - }, []); - - React.useEffect(() => { - let schedulerElement = MyScheduler.current.element; - schedulerElement.addEventListener('drop', handleDropItem); - schedulerElement.addEventListener('dragover', handleDragOver); - return () => { - schedulerElement.removeEventListener('drop', handleDropItem); - schedulerElement.removeEventListener('dragover', handleDragOver); - }; - }, []); - - const MyItemRender = (props) => { - let item = props.dataItem; - return ( -
    { - refDragItem.current = props.dataItem; - }} - style={{ padding: 10, borderBottom: '1px solid lightgrey' }} - > - {item.title} -
    - ); - }; - return ( - <> - - - - -
    - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/dnd-from-listview/main.jsx b/docs/knowledge-base/examples/scheduler/dnd-from-listview/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/dnd-from-listview/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/export-to-ical/app.jsx b/docs/knowledge-base/examples/scheduler/export-to-ical/app.jsx deleted file mode 100644 index 84f9bf57..00000000 --- a/docs/knowledge-base/examples/scheduler/export-to-ical/app.jsx +++ /dev/null @@ -1,108 +0,0 @@ -import * as React from "react"; -import { - Scheduler, - WeekView, - SchedulerHeader, -} from "@progress/kendo-react-scheduler"; -import { sampleData, displayDate } from "./shared-events-utc"; - - -import ICAL from "ical.js"; - -import { ZonedDate } from "@progress/kendo-date-math"; -import "@progress/kendo-date-math/tz/America/New_York"; -import "@progress/kendo-date-math/tz/America/Los_Angeles"; - -import { formatDate } from "@progress/kendo-intl"; - -import { saveAs } from "@progress/kendo-file-saver"; - -const getISOString = (date, toUTC) => { - if (toUTC) { - const tzDate = ZonedDate.fromLocalDate(date, "America/New_York"); - date = tzDate.toTimezone("Etc/UTC"); - } - return formatDate(date, "yyyy-MM-ddTHH:mm:ssZ"); -}; - -const App = () => { - const [data, setData] = React.useState(sampleData); - - const customHeader = props => { - return ( - - - {props.children} - - ); - }; - - const exportToIcal = () => { - var component = new ICAL.Component(["vcalendar", [], []]); - component.updatePropertyWithValue("prodid", "iCal.js Example"); - component.updatePropertyWithValue("version", "2.0"); - - var schedulerEvents = data; - - for (var i = 0; i < schedulerEvents.length; i++) { - var schedulerEvent = schedulerEvents[i]; - var vevent = new ICAL.Component("vevent"); - var event = new ICAL.Event(vevent); - - event.uid = schedulerEvent.recurrenceId - ? schedulerEvent.recurrenceId.toString() - : schedulerEvent.id.toString(); - event.summary = schedulerEvent.title; - event.description = schedulerEvent.description; - event.startDate = ICAL.Time.fromDateTimeString( - getISOString(schedulerEvent.start, true) - ); - event.endDate = ICAL.Time.fromDateTimeString( - getISOString(schedulerEvent.end, true) - ); - - if (schedulerEvent.recurrenceRule) { - event.component.addProperty( - new ICAL.Property( - ICAL.parse.property("RRULE:" + schedulerEvent.recurrenceRule) - ) - ); - } - - if (schedulerEvent.recurrenceException) { - event.component.addProperty( - new ICAL.Property( - ICAL.parse.property("EXDATE:" + schedulerEvent.recurrenceException) - ) - ); - } - - if (schedulerEvent.recurrenceId) { - event.recurrenceId = ICAL.Time.fromDateTimeString( - getISOString(schedulerEvent.start, true) - ); - } - - event.component.addPropertyWithValue( - "dtstamp", - ICAL.Time.fromDateTimeString(getISOString(new Date(), true)) - ); - component.addSubcomponent(vevent); - } - saveAs( - "data:text/calendar," + component.toString(), - "KendoSchedulerCal.ics" - ); - }; - return ( - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/export-to-ical/main.jsx b/docs/knowledge-base/examples/scheduler/export-to-ical/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/export-to-ical/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/icon-in-group-header/app.jsx b/docs/knowledge-base/examples/scheduler/icon-in-group-header/app.jsx deleted file mode 100644 index 2caa601d..00000000 --- a/docs/knowledge-base/examples/scheduler/icon-in-group-header/app.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import * as React from 'react'; -import { Scheduler, DayView } from '@progress/kendo-react-scheduler'; -import { data, defaultDate } from './data'; -const group = { - resources: ['Rooms', 'Person'], - orientation: 'horizontal', -}; -const resources = [ - { - name: 'Rooms', - data: [ - { - text: ( - - Meeting room 101{' '} - - - ), - value: 1, - color: '#5392E4', - }, - { - text: 'Meeting Room 201', - value: 2, - color: '#FF7272', - }, - ], - field: 'roomId', - valueField: 'value', - textField: 'text', - colorField: 'color', - }, - { - name: 'Person', - data: [ - { - text: ( - - Peter{' '} - - - ), - value: 1, - }, - { - text: 'Alex', - value: 2, - }, - ], - field: 'personId', - valueField: 'value', - textField: 'text', - colorField: 'color', - }, -]; - -const App = () => { - return ( - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/icon-in-group-header/data.js b/docs/knowledge-base/examples/scheduler/icon-in-group-header/data.js deleted file mode 100644 index 30a1c7a3..00000000 --- a/docs/knowledge-base/examples/scheduler/icon-in-group-header/data.js +++ /dev/null @@ -1,30 +0,0 @@ -export const defaultDate = new Date("2011-06-09T00:00:00.000Z"); -export const data = [{ - id: 0, - title: 'Room 1, Person 1', - start: new Date("2011-06-09T09:00:00.000Z"), - end: new Date("2011-06-09T11:00:00.000Z"), - roomId: 1, - personId: 1 -}, { - id: 1, - title: 'Room 1, Person 2', - start: new Date("2011-06-09T09:00:00.000Z"), - end: new Date("2011-06-09T11:00:00.000Z"), - roomId: 1, - personId: 2 -}, { - id: 2, - title: 'Room 2, Person 1', - start: new Date("2011-06-09T09:00:00.000Z"), - end: new Date("2011-06-09T11:00:00.000Z"), - roomId: 2, - personId: 1 -}, { - id: 3, - title: 'Room 2, Person 2', - start: new Date("2011-06-09T09:00:00.000Z"), - end: new Date("2011-06-09T11:00:00.000Z"), - roomId: 2, - personId: 2 -}]; \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/icon-in-group-header/main.jsx b/docs/knowledge-base/examples/scheduler/icon-in-group-header/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/icon-in-group-header/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/app.jsx b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/app.jsx deleted file mode 100644 index eb89460f..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/app.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import * as React from 'react'; -import { - Scheduler, - DayView, - WeekView, - WorkWeekView, -} from '@progress/kendo-react-scheduler'; -import { guid } from '@progress/kendo-react-common'; -import { FormWithCustomEditor } from './custom-form'; -import { EditItemWithDynamicTitle } from './custom-item'; -import { - customModelFields, - displayDate, - rooms, - sampleDataWithCustomSchema, - therapists, -} from './data'; -const App = () => { - const [data, setData] = React.useState(sampleDataWithCustomSchema); - const handleDataChange = ({ created, updated, deleted }) => { - setData((old) => - old - .filter( - (item) => - deleted.find( - (current) => current.AppointmentID === item.AppointmentID - ) === undefined - ) - .map( - (item) => - updated.find( - (current) => current.AppointmentID === item.AppointmentID - ) || item - ) - .concat( - created.map((item) => - Object.assign({}, item, { - AppointmentID: guid(), - }) - ) - ) - ); - }; - return ( - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-dialog.jsx b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-dialog.jsx deleted file mode 100644 index c8701a37..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-dialog.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import * as React from 'react'; -import { Dialog } from '@progress/kendo-react-dialogs'; -export const CustomDialog = props => { - return ; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-form-editor.jsx b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-form-editor.jsx deleted file mode 100644 index d47dddbd..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-form-editor.jsx +++ /dev/null @@ -1,92 +0,0 @@ -import * as React from 'react'; -import { FormElement, Field } from '@progress/kendo-react-form'; -import { Label, Error } from '@progress/kendo-react-labels'; -import { TextArea } from '@progress/kendo-react-inputs'; -import { DatePicker, DateTimePicker } from '@progress/kendo-react-dateinputs'; -import { - TitleEditor, - TreatmentEditor, - RoomEditor, - TherapistEditor, -} from './editors'; -import { SchedulerFormEditor } from '@progress/kendo-react-scheduler'; -export const CustomFormEditor = (props) => { - const fields = 'Start'; - const start = props.valueGetter(fields.start) || new Date(); - return ( - -
    - -
    - - {props.errors.Patient && {props.errors.Patient}} -
    -
    -
    - -
    - -
    -
    -
    - -
    - - {props.errors.Treatment && {props.errors.Treatment}} -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - -   - -   - -
    -
    -
    -
    - -
    - -
    -
    - -
    -
    -
    - ); -}; diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-form.jsx b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-form.jsx deleted file mode 100644 index eae374e5..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-form.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -import { SchedulerForm } from '@progress/kendo-react-scheduler'; -import { CustomFormEditor } from './custom-form-editor'; -import { CustomDialog } from './custom-dialog'; -export const FormWithCustomEditor = props => { - const requiredValidator = React.useCallback(value => value === undefined || value === null || value === '' ? 'Field is required.' : undefined, []); - const formValidator = (_dataItem, formValueGetter) => { - let result = {}; - result.Patient = [requiredValidator(formValueGetter('Patient'))].filter(Boolean).reduce((current, acc) => current || acc, ''); - result.Treatment = [requiredValidator(formValueGetter('Treatment'))].filter(Boolean).reduce((current, acc) => current || acc, ''); - return result; - }; - return ; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-item.jsx b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-item.jsx deleted file mode 100644 index 2b751431..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/custom-item.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import * as React from 'react'; -import { SchedulerEditItem } from '@progress/kendo-react-scheduler'; -import { treatments, patients } from './data'; -export const EditItemWithDynamicTitle = props => { - return ; -}; -const generateTitle = dataItem => { - const patient = patients.find(p => p.id === dataItem.Patient); - const treatment = treatments.find(t => t.value === dataItem.Treatment); - return `${patient && patient.name} - ${treatment && treatment.text}`; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/data.js b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/data.js deleted file mode 100644 index 75bc7297..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/data.js +++ /dev/null @@ -1,180 +0,0 @@ -import { guid } from "@progress/kendo-react-common"; -export const therapists = [{ - value: 'andr', - name: "Dr. Anderson", - color: "#7F96FF" -}, { - value: 'bail', - name: "Dr. Bailey", - color: "#E56399" -}, { - value: 'burg', - name: "Dr. Burgess", - color: '#A6CFD5' -}, { - value: 'quin', - name: "Dr. Quinn", - color: '#320E3B' -}]; -export const rooms = [{ - id: 1, - title: 'Bedford' -}, { - id: 2, - title: 'Sofia' -}]; -export const treatments = [{ - value: 138, - text: 'Vital sign' -}, { - value: 189, - text: 'Blood test' -}, { - value: 392, - text: 'Electrooculography(EOG)' -}, { - value: 491, - text: 'Holter monitor(ECG)' -}]; -export const patients = [{ - id: 0, - name: 'Liam' -}, { - id: 1, - name: 'Olivia' -}, { - id: 2, - name: 'Finn' -}, { - id: 3, - name: 'Michael' -}, { - id: 4, - name: 'Michael' -}, { - id: 5, - name: 'Nora' -}]; -const baseData = [{ - "Start": "2020-06-24T08:00:00.000Z", - "End": "2020-06-24T08:30:00.000Z", - "isAllDay": false, - "Room": 1, - "Therapist": "andr", - "Patient": 0, - "Treatment": 138, - "AppointmentID": "6aa39025-019a-43b6-9270-3de34b7028ef" -}, { - "Start": "2020-06-24T09:00:00.000Z", - "End": "2020-06-24T09:30:00.000Z", - "isAllDay": false, - "Room": 2, - "Therapist": "andr", - "Patient": 1, - "Treatment": 189, - "AppointmentID": "b85d65b4-8580-49fd-bf95-7d4074d20948" -}, { - "Start": "2020-06-24T09:30:00.000Z", - "End": "2020-06-24T11:45:00.000Z", - "isAllDay": false, - "Room": 1, - "Therapist": "bail", - "Patient": 3, - "Treatment": 491, - "AppointmentID": "bb7c5576-e6dd-49fa-ba32-bd2a8f2b81eb" -}, { - "Start": "2020-06-24T10:00:00.000Z", - "End": "2020-06-24T10:45:00.000Z", - "isAllDay": false, - "Room": 1, - "Therapist": "andr", - "Patient": 5, - "Treatment": 189, - "AppointmentID": "e34e2cf7-b6ff-4efa-a6f0-853d642e2707" -}, { - "Start": "2020-06-24T08:30:00.000Z", - "End": "2020-06-24T11:00:00.000Z", - "isAllDay": false, - "Room": 1, - "Therapist": "burg", - "Patient": 2, - "Treatment": 392, - "AppointmentID": "fcc66c0d-c3a3-421a-84c6-12e2f12a60e6" -}, { - "Start": "2020-06-24T08:00:00.000Z", - "End": "2020-06-24T09:00:00.000Z", - "isAllDay": false, - "Room": 2, - "Therapist": "bail", - "Patient": 3, - "Treatment": 189, - "AppointmentID": "4c5a291e-2d7a-4c6c-8ea8-fd962f07c207" -}, { - "Start": "2020-06-24T11:30:00.000Z", - "End": "2020-06-24T14:00:00.000Z", - "isAllDay": false, - "Room": 2, - "Therapist": "burg", - "Patient": 1, - "Treatment": 392, - "AppointmentID": "cc5902d3-47bd-4002-aca8-40022a2c5f8a" -}, { - "Start": "2020-06-24T12:00:00.000Z", - "End": "2020-06-24T13:30:00.000Z", - "isAllDay": false, - "Room": 1, - "Therapist": "quin", - "Treatment": 392, - "Patient": 5, - "AppointmentID": "74022c9d-8f7e-435e-b24e-59db007eaf5d" -}, { - "Start": "2020-06-24T08:00:00.000Z", - "End": "2020-06-24T09:40:00.000Z", - "isAllDay": false, - "Room": 2, - "Therapist": "quin", - "Patient": 5, - "Treatment": 189, - "AppointmentID": "053415e1-88ca-4564-90d2-8fdaaba2449d" -}, { - "Start": "2020-06-24T12:30:00.000Z", - "End": "2020-06-24T13:00:00.000Z", - "isAllDay": false, - "Room": 2, - "Therapist": "bail", - "Treatment": 491, - "Patient": 2, - "AppointmentID": "e31b1cf3-cc2c-490d-8c5a-5106afeecbd9" -}, { - "Start": "2020-06-24T11:30:00.000Z", - "End": "2020-06-24T12:00:00.000Z", - "isAllDay": false, - "Room": 2, - "Therapist": "andr", - "Treatment": 491, - "Patient": 5, - "AppointmentID": "501cf356-3af0-400a-9ff9-76ea7aa0d3b2" -}]; -export const customModelFields = { - id: 'AppointmentID', - description: 'Note', - start: 'Start', - end: 'End', - title: 'Title', - recurrenceRule: 'RecurrenceRule', - recurrenceId: 'RecurrenceID', - recurrenceExceptions: 'RecurrenceException' -}; -const currentYear = new Date().getFullYear(); -const parseAdjust = eventDate => { - const date = new Date(eventDate); - date.setFullYear(currentYear); - return date; -}; -export const displayDate = new Date(Date.UTC(currentYear, 5, 24)); -export const sampleDataWithCustomSchema = baseData.map(dataItem => ({ - ...dataItem, - AppointmentID: guid(), - Start: parseAdjust(dataItem.Start), - End: parseAdjust(dataItem.End) -})); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/editors.jsx b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/editors.jsx deleted file mode 100644 index 711dd1bc..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/editors.jsx +++ /dev/null @@ -1,43 +0,0 @@ -import * as React from 'react'; -import { DropDownList } from '@progress/kendo-react-dropdowns'; -import { patients, treatments, rooms, therapists } from './data'; -export const TitleEditor = props => { - const handleChange = event => { - if (props.onChange) { - props.onChange.call(undefined, { - value: event.value.id - }); - } - }; - return p.id === props.value)} data={patients} dataItemKey={'id'} textField={'name'} />; -}; -export const TreatmentEditor = props => { - const handleChange = event => { - if (props.onChange) { - props.onChange.call(undefined, { - value: event.value.value - }); - } - }; - return t.value === props.value)} data={treatments} dataItemKey={'value'} textField={'text'} />; -}; -export const TherapistEditor = props => { - const handleChange = event => { - if (props.onChange) { - props.onChange.call(undefined, { - value: event.value.value - }); - } - }; - return t.value === props.value)} data={therapists} dataItemKey={'value'} textField={'name'} />; -}; -export const RoomEditor = props => { - const handleChange = event => { - if (props.onChange) { - props.onChange.call(undefined, { - value: event.value.id - }); - } - }; - return r.id === props.value)} data={rooms} dataItemKey={'id'} textField={'title'} />; -}; \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/main.jsx b/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/recurring-event-form-editor/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/scheduler/start-end-dates/app.jsx b/docs/knowledge-base/examples/scheduler/start-end-dates/app.jsx deleted file mode 100644 index f5df0a36..00000000 --- a/docs/knowledge-base/examples/scheduler/start-end-dates/app.jsx +++ /dev/null @@ -1,63 +0,0 @@ -import * as React from 'react'; -import { - Scheduler, - AgendaView, - TimelineView, - DayView, - WeekView, - MonthView, -} from '@progress/kendo-react-scheduler'; -import { sampleData, displayDate } from './shared-events-utc'; - -const App = () => { - const [start, setStart] = React.useState(''); - const [end, setEnd] = React.useState(''); - const [date, setDate] = React.useState(displayDate); - const [view, setView] = React.useState('day'); - - const handleDateChange = (event) => { - setDate(event.value); - }; - - const handleViewChange = (event) => { - setView(event.value); - }; - - React.useEffect(() => { - if (document) { - const allSlots = document.querySelectorAll( - '.k-scheduler-body .k-scheduler-cell.k-slot-cell' - ); - const firstSlot = allSlots[0]; - const lastSlot = allSlots[allSlots.length - 1]; - - setStart( - new Date(parseInt(firstSlot.getAttribute('data-slot-start'), 10)) - ); - - setEnd(new Date(parseInt(lastSlot.getAttribute('data-slot-end'), 10))); - } - }, [date, view]); - - return ( -
    -
    start: {start.toString()}
    -
    end: {end.toString()}
    - - - - - - - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/scheduler/start-end-dates/main.jsx b/docs/knowledge-base/examples/scheduler/start-end-dates/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/scheduler/start-end-dates/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/shared/shared-countries.js b/docs/knowledge-base/examples/shared/shared-countries.js deleted file mode 100644 index 4afec915..00000000 --- a/docs/knowledge-base/examples/shared/shared-countries.js +++ /dev/null @@ -1,56 +0,0 @@ - -export default [ - "Select All", - "Albania", - "Andorra", - "Armenia", - "Austria", - "Azerbaijan", - "Belarus", - "Belgium", - "Bosnia & Herzegovina", - "Bulgaria", - "Croatia", - "Cyprus", - "Czech Republic", - "Denmark", - "Estonia", - "Finland", - "France", - "Georgia", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Ireland", - "Italy", - "Kosovo", - "Latvia", - "Liechtenstein", - "Lithuania", - "Luxembourg", - "Macedonia", - "Malta", - "Moldova", - "Monaco", - "Montenegro", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Russia", - "San Marino", - "Serbia", - "Slovakia", - "Slovenia", - "Spain", - "Sweden", - "Switzerland", - "Turkey", - "Ukraine", - "United Kingdom", - "Vatican City" - ]; - - \ No newline at end of file diff --git a/docs/knowledge-base/examples/shared/shared-data.js b/docs/knowledge-base/examples/shared/shared-data.js deleted file mode 100644 index f20aa61f..00000000 --- a/docs/knowledge-base/examples/shared/shared-data.js +++ /dev/null @@ -1,29 +0,0 @@ -const data = [ - { - taskID: 1, - ownerId: 1, - title: "Fast and furious 6" - }, - { - taskID: 2, - ownerId: 3, - title: "The Internship" - }, - { - taskID: 3, - ownerId: 2, - title: "The Perks of Being a Wallflower" - }, - { - taskID: 4, - ownerId: 1, - title: "The Help" - }, - { - taskID: 5, - ownerId: 2, - title: "Now You See Me" - } -]; - -export default data; diff --git a/docs/knowledge-base/examples/shared/shared-events-utc.js b/docs/knowledge-base/examples/shared/shared-events-utc.js deleted file mode 100644 index 73deb2b8..00000000 --- a/docs/knowledge-base/examples/shared/shared-events-utc.js +++ /dev/null @@ -1,848 +0,0 @@ - -const baseData = [ - { - "TaskID": 4, - "OwnerID": 2, - "Title": "Bowling tournament", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-09T21:00:00.000Z", - "End": "2013-06-10T00:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 5, - "OwnerID": 2, - "Title": "Take the dog to the vet", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-10T07:00:00.000Z", - "End": "2013-06-10T08:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 6, - "OwnerID": 2, - "Title": "Call Charlie about the project", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-11T11:30:00.000Z", - "End": "2013-06-11T13:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 7, - "OwnerID": 3, - "Title": "Meeting with Alex", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-12T11:00:00.000Z", - "End": "2013-06-12T12:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 9, - "OwnerID": 2, - "Title": "Alex's Birthday", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-14T02:00:00.000Z", - "End": "2013-06-14T02:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 12, - "OwnerID": 2, - "Title": "Car Service", - "RoomID": 1, - "Description": "Might come to work later!", - "StartTimezone": null, - "Start": "2013-06-24T08:30:00.000Z", - "End": "2013-06-24T10:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 14, - "OwnerID": 3, - "RoomID": 2, - "PersonID": 3, - "Title": "Replace the printer on the 1st floor", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-24T10:00:00.000Z", - "End": "2013-06-24T11:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 15, - "OwnerID": 1, - "Title": "Attending HR Conference", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T00:00:00.000Z", - "End": "2013-06-26T00:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 16, - "OwnerID": 1, - "Title": "Business Lunch with Gregory Watkins", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T12:00:00.000Z", - "End": "2013-06-25T13:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 17, - "OwnerID": 1, - "Title": "Breakfast with CFO and COO", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-27T08:30:00.000Z", - "End": "2013-06-27T09:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 18, - "OwnerID": 1, - "Title": "Job Interview - Mathew Stevens", - "Description": "Junior Researcher", - "StartTimezone": null, - "Start": "2013-06-27T10:00:00.000Z", - "End": "2013-06-27T11:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 19, - "OwnerID": 1, - "Title": "Review CVs with Tim", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-27T11:00:00.000Z", - "End": "2013-06-27T11:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 20, - "OwnerID": 1, - "Title": "Lunch with Monica", - "Description": "Discuss the Employee handbook", - "StartTimezone": null, - "Start": "2013-06-27T12:00:00.000Z", - "End": "2013-06-27T13:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 21, - "OwnerID": 1, - "Title": "Job Interview - John Stewart", - "Description": "Accountant", - "StartTimezone": null, - "Start": "2013-06-27T14:00:00.000Z", - "End": "2013-06-27T15:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 22, - "OwnerID": 1, - "Title": "Job Interview - Mary Smith", - "Description": "Accountant", - "StartTimezone": null, - "Start": "2013-06-27T15:30:00.000Z", - "End": "2013-06-27T16:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 24, - "OwnerID": 3, - "Title": "Register new Access Cards", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-24T12:00:00.000Z", - "End": "2013-06-24T12:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 25, - "OwnerID": 1, - "Title": "HR Lecture", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-04T19:00:00.000Z", - "End": "2013-06-04T21:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "FREQ=WEEKLY;BYDAY=TU,TH", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 26, - "OwnerID": 1, - "Title": "Dentist", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-28T08:00:00.000Z", - "End": "2013-06-28T09:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 27, - "OwnerID": 1, - "Title": "Job Interview - Laura Bailey", - "Description": "Helpdesk", - "StartTimezone": null, - "Start": "2013-06-28T09:30:00.000Z", - "End": "2013-06-28T10:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 28, - "OwnerID": 1, - "Title": "Job Interview - Jenny Baxter", - "Description": "Helpdesk", - "StartTimezone": null, - "Start": "2013-06-28T11:00:00.000Z", - "End": "2013-06-28T12:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 31, - "OwnerID": 1, - "Title": "Team building prep tasks", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-28T14:00:00.000Z", - "End": "2013-06-28T17:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 32, - "OwnerID": 2, - "RoomID": 2, - "Title": "Job Interview - Bernard Atkins", - "Description": "Helpdesk", - "StartTimezone": null, - "Start": "2013-06-24T13:30:00.000Z", - "End": "2013-06-24T14:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 34, - "OwnerID": 1, - "Title": "Review Job Applications", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-24T15:00:00.000Z", - "End": "2013-06-24T17:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 35, - "OwnerID": 1, - "Title": "Grand Canyon tour", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-23T00:00:00.000Z", - "End": "2013-06-23T00:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 40, - "OwnerID": 3, - "Title": "Install new laptops in conference rooms", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-24T13:30:00.000Z", - "End": "2013-06-24T15:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 66, - "OwnerID": 3, - "Title": "Bob's Birthday", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-29T08:00:00.000Z", - "End": "2013-06-29T06:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 68, - "OwnerID": 1, - "RoomID": 2, - "Title": "Breakfast with Tom", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-24T09:45:00.000Z", - "End": "2013-06-24T11:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 69, - "OwnerID": 2, - "Title": "Team planning meeting", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-24T10:00:00.000Z", - "End": "2013-06-24T12:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 70, - "OwnerID": 2, - "Title": "Support Phone Call", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-24T16:00:00.000Z", - "End": "2013-06-24T16:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 71, - "OwnerID": 2, - "Title": "Business breakfast with Caroline", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T09:00:00.000Z", - "End": "2013-06-25T10:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 72, - "OwnerID": 2, - "Title": "Discuss preojects' deadlines", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T11:00:00.000Z", - "End": "2013-06-25T11:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 73, - "OwnerID": 2, - "Title": "Support Meeting", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T15:00:00.000Z", - "End": "2013-06-25T16:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 74, - "OwnerID": 2, - "Title": "Dine with Mathew", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T18:30:00.000Z", - "End": "2013-06-25T20:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 79, - "OwnerID": 2, - "Title": "Banking", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-26T09:00:00.000Z", - "End": "2013-06-26T10:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 80, - "OwnerID": 3, - "Title": "Software updates", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T10:00:00.000Z", - "End": "2013-06-25T12:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 81, - "OwnerID": 3, - "Title": "UPS maintenance", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-25T16:30:00.000Z", - "End": "2013-06-25T18:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 82, - "OwnerID": 2, - "Title": "Support Call", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-26T11:30:00.000Z", - "End": "2013-06-26T12:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 83, - "OwnerID": 3, - "Title": "Phone Sync with NY office ", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-26T13:30:00.000Z", - "End": "2013-06-26T14:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 84, - "OwnerID": 3, - "Title": "Phone Sync with Boston Office", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-26T15:00:00.000Z", - "End": "2013-06-26T16:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 85, - "OwnerID": 3, - "Title": "Server maintenance", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-26T18:30:00.000Z", - "End": "2013-06-26T21:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": true - }, - { - "TaskID": 86, - "OwnerID": 2, - "Title": "Status meeting", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-28T13:30:00.000Z", - "End": "2013-06-28T15:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 87, - "OwnerID": 3, - "Title": "Helpdesk status meeting", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-27T10:30:00.000Z", - "End": "2013-06-27T11:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 88, - "OwnerID": 2, - "Title": "Business Lunch", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-27T12:00:00.000Z", - "End": "2013-06-27T13:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 89, - "OwnerID": 3, - "Title": "Employee database update", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-27T14:00:00.000Z", - "End": "2013-06-27T15:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 90, - "OwnerID": 3, - "Title": "Website upload", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-27T07:30:00.000Z", - "End": "2013-06-27T08:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 91, - "OwnerID": 2, - "Title": "Meeting with marketing guys", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-27T17:00:00.000Z", - "End": "2013-06-27T18:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 92, - "OwnerID": 3, - "Title": "Meeting with Internet provider", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-28T10:30:00.000Z", - "End": "2013-06-28T11:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 93, - "OwnerID": 3, - "Title": "Bob's Birthday Party", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-29T20:00:00.000Z", - "End": "2013-06-29T23:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": null, - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 95, - "OwnerID": 2, - "Title": "Dance Practice", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-03T18:30:00.000Z", - "End": "2013-06-03T20:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "FREQ=WEEKLY;BYDAY=MO,WE", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 114, - "OwnerID": 3, - "Title": "Software updates", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-04T09:00:00.000Z", - "End": "2013-06-04T12:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 115, - "OwnerID": 1, - "Title": "Breakfast at Starbucks", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-04T08:00:00.000Z", - "End": "2013-06-04T09:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 116, - "OwnerID": 2, - "Title": "Performance review", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-04T14:00:00.000Z", - "End": "2013-06-04T17:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 118, - "OwnerID": 1, - "Title": "HR seminar preparation", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-05T10:00:00.000Z", - "End": "2013-06-05T12:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 119, - "OwnerID": 3, - "Title": "Helpdesk weekly meeting", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-05T15:00:00.000Z", - "End": "2013-06-05T16:00:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "FREQ=WEEKLY;BYDAY=WE", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - }, - { - "TaskID": 120, - "OwnerID": 3, - "Title": "Website upload", - "Description": "", - "StartTimezone": null, - "Start": "2013-06-07T07:00:00.000Z", - "End": "2013-06-07T08:30:00.000Z", - "EndTimezone": null, - "RecurrenceRule": "", - "RecurrenceID": null, - "RecurrenceException": null, - "isAllDay": false - } -]; - -export const customModelFields = { - id: 'TaskID', - title: 'Title', - description: 'Description', - start: 'Start', - end: 'End', - recurrenceRule: 'RecurrenceRule', - recurrenceId: 'RecurrenceID', - recurrenceExceptions: 'RecurrenceException', -}; - -const currentYear = new Date().getFullYear(); -const parseAdjust = (eventDate) => { - const date = new Date(eventDate); - date.setFullYear(currentYear); - return date; -}; - -const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; - -export const displayDate = new Date(Date.UTC(currentYear, 5, 24)); - -export const sampleData = baseData.map(dataItem => ( - { - id: dataItem.TaskID, - start: parseAdjust(dataItem.Start), - startTimezone: dataItem.startTimezone, - end: parseAdjust(dataItem.End), - endTimezone: dataItem.endTimezone, - isAllDay: dataItem.isAllDay, - title: dataItem.Title, - description: dataItem.Description, - recurrenceRule: dataItem.RecurrenceRule, - recurrenceId: dataItem.RecurrenceID, - recurrenceExceptions: dataItem.RecurrenceException, - - roomId: dataItem.RoomID, - ownerID: dataItem.OwnerID, - personId: dataItem.OwnerID - } -)); - -export const sampleDataWithResources = baseData.map(dataItem => ( - { - id: dataItem.TaskID, - start: parseAdjust(dataItem.Start), - startTimezone: dataItem.startTimezone, - end: parseAdjust(dataItem.End), - endTimezone: dataItem.endTimezone, - isAllDay: dataItem.isAllDay, - title: dataItem.Title, - description: dataItem.Description, - recurrenceRule: dataItem.RecurrenceRule, - recurrenceId: dataItem.RecurrenceID, - recurrenceExceptions: dataItem.RecurrenceException, - roomId: randomInt(1, 2), - personId: randomInt(1, 2), - } -)); - -export const sampleDataWithCustomSchema = baseData.map(dataItem => ( - { - ...dataItem, - Start: parseAdjust(dataItem.Start), - End: parseAdjust(dataItem.End), - PersonIDs: randomInt(1, 2), - RoomID: randomInt(1, 2), - } -)); diff --git a/docs/knowledge-base/examples/shared/shared-products-loader.jsx b/docs/knowledge-base/examples/shared/shared-products-loader.jsx deleted file mode 100644 index 0b119e54..00000000 --- a/docs/knowledge-base/examples/shared/shared-products-loader.jsx +++ /dev/null @@ -1,54 +0,0 @@ - -import * as React from 'react'; - -import { toODataString } from '@progress/kendo-data-query'; - -export class ProductsLoader extends React.Component { - baseUrl = 'https://demos.telerik.com/kendo-ui/service-v4/odata/Products?$count=true&'; - init = { method: 'GET', accept: 'application/json', headers: {} }; - - lastSuccess = ''; - pending = ''; - - requestDataIfNeeded = () => { - if (this.pending || toODataString(this.props.dataState) === this.lastSuccess) { - return; - } - this.pending = toODataString(this.props.dataState); - fetch(this.baseUrl + this.pending, this.init) - .then(response => response.json()) - .then(json => { - this.lastSuccess = this.pending; - this.pending = ''; - if (toODataString(this.props.dataState) === this.lastSuccess) { - this.props.onDataReceived.call(undefined, { - data: json.value, - total: json['@odata.count'] - }); - } else { - this.requestDataIfNeeded(); - } - }); - } - - render() { - this.requestDataIfNeeded(); - return this.pending && ; - } -} - - -class LoadingPanel extends React.Component { - render() { - const loadingPanel = ( -
    - Loading -
    -
    -
    - ); - - const gridContent = document && document.querySelector('.k-grid-content'); - return gridContent ? ReactDOM.createPortal(loadingPanel, gridContent) : loadingPanel; - } -} diff --git a/docs/knowledge-base/examples/shared/shared-products-with-sections.json b/docs/knowledge-base/examples/shared/shared-products-with-sections.json deleted file mode 100644 index 5f78efd2..00000000 --- a/docs/knowledge-base/examples/shared/shared-products-with-sections.json +++ /dev/null @@ -1,1360 +0,0 @@ -[ - { - "ProductName": "Beverages", - "UnitPrice": 37.979166666666664, - "UnitsInStock": 559, - "locked": true - }, - { - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 24, - "ProductName": "Guaraná Fantástica", - "SupplierID": 10, - "CategoryID": 1, - "QuantityPerUnit": "12 - 355 ml cans", - "UnitPrice": 4.5, - "UnitsInStock": 20, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 34, - "ProductName": "Sasquatch Ale", - "SupplierID": 16, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 14, - "UnitsInStock": 111, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 35, - "ProductName": "Steeleye Stout", - "SupplierID": 16, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 18, - "UnitsInStock": 20, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 38, - "ProductName": "Côte de Blaye", - "SupplierID": 18, - "CategoryID": 1, - "QuantityPerUnit": "12 - 75 cl bottles", - "UnitPrice": 263.5, - "UnitsInStock": 17, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 39, - "ProductName": "Chartreuse verte", - "SupplierID": 18, - "CategoryID": 1, - "QuantityPerUnit": "750 cc per bottle", - "UnitPrice": 18, - "UnitsInStock": 69, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 43, - "ProductName": "Ipoh Coffee", - "SupplierID": 20, - "CategoryID": 1, - "QuantityPerUnit": "16 - 500 g tins", - "UnitPrice": 46, - "UnitsInStock": 17, - "UnitsOnOrder": 10, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 67, - "ProductName": "Laughing Lumberjack Lager", - "SupplierID": 16, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 14, - "UnitsInStock": 52, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 70, - "ProductName": "Outback Lager", - "SupplierID": 7, - "CategoryID": 1, - "QuantityPerUnit": "24 - 355 ml bottles", - "UnitPrice": 15, - "UnitsInStock": 15, - "UnitsOnOrder": 10, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 75, - "ProductName": "Rhönbräu Klosterbier", - "SupplierID": 12, - "CategoryID": 1, - "QuantityPerUnit": "24 - 0.5 l bottles", - "UnitPrice": 7.75, - "UnitsInStock": 125, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductID": 76, - "ProductName": "Lakkalikööri", - "SupplierID": 23, - "CategoryID": 1, - "QuantityPerUnit": "500 ml", - "UnitPrice": 18, - "UnitsInStock": 57, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, - { - "ProductName": "Condiments", - "UnitPrice": 23.0625, - "UnitsInStock": 507, - "locked": true - }, - { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 15, - "ProductName": "Genen Shouyu", - "SupplierID": 6, - "CategoryID": 2, - "QuantityPerUnit": "24 - 250 ml bottles", - "UnitPrice": 15.5, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 44, - "ProductName": "Gula Malacca", - "SupplierID": 20, - "CategoryID": 2, - "QuantityPerUnit": "20 - 2 kg bags", - "UnitPrice": 19.45, - "UnitsInStock": 27, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 61, - "ProductName": "Sirop d'érable", - "SupplierID": 29, - "CategoryID": 2, - "QuantityPerUnit": "24 - 500 ml bottles", - "UnitPrice": 28.5, - "UnitsInStock": 113, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 63, - "ProductName": "Vegie-spread", - "SupplierID": 7, - "CategoryID": 2, - "QuantityPerUnit": "15 - 625 g jars", - "UnitPrice": 43.9, - "UnitsInStock": 24, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 65, - "ProductName": "Louisiana Fiery Hot Pepper Sauce", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "32 - 8 oz bottles", - "UnitPrice": 21.05, - "UnitsInStock": 76, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 66, - "ProductName": "Louisiana Hot Spiced Okra", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "24 - 8 oz jars", - "UnitPrice": 17, - "UnitsInStock": 4, - "UnitsOnOrder": 100, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductID": 77, - "ProductName": "Original Frankfurter grüne Soße", - "SupplierID": 12, - "CategoryID": 2, - "QuantityPerUnit": "12 boxes", - "UnitPrice": 13, - "UnitsInStock": 32, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, - { - "ProductName": "Confections", - "UnitPrice": 25.16, - "UnitsInStock": 386, - "locked": true - }, - { - "ProductID": 16, - "ProductName": "Pavlova", - "SupplierID": 7, - "CategoryID": 3, - "QuantityPerUnit": "32 - 500 g boxes", - "UnitPrice": 17.45, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 19, - "ProductName": "Teatime Chocolate Biscuits", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "10 boxes x 12 pieces", - "UnitPrice": 9.2, - "UnitsInStock": 25, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 20, - "ProductName": "Sir Rodney's Marmalade", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "30 gift boxes", - "UnitPrice": 81, - "UnitsInStock": 40, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 21, - "ProductName": "Sir Rodney's Scones", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "24 pkgs. x 4 pieces", - "UnitPrice": 10, - "UnitsInStock": 3, - "UnitsOnOrder": 40, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 25, - "ProductName": "NuNuCa Nuß-Nougat-Creme", - "SupplierID": 11, - "CategoryID": 3, - "QuantityPerUnit": "20 - 450 g glasses", - "UnitPrice": 14, - "UnitsInStock": 76, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 26, - "ProductName": "Gumbär Gummibärchen", - "SupplierID": 11, - "CategoryID": 3, - "QuantityPerUnit": "100 - 250 g bags", - "UnitPrice": 31.23, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 27, - "ProductName": "Schoggi Schokolade", - "SupplierID": 11, - "CategoryID": 3, - "QuantityPerUnit": "100 - 100 g pieces", - "UnitPrice": 43.9, - "UnitsInStock": 49, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 47, - "ProductName": "Zaanse koeken", - "SupplierID": 22, - "CategoryID": 3, - "QuantityPerUnit": "10 - 4 oz boxes", - "UnitPrice": 9.5, - "UnitsInStock": 36, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 48, - "ProductName": "Chocolade", - "SupplierID": 22, - "CategoryID": 3, - "QuantityPerUnit": "10 pkgs.", - "UnitPrice": 12.75, - "UnitsInStock": 15, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 49, - "ProductName": "Maxilaku", - "SupplierID": 23, - "CategoryID": 3, - "QuantityPerUnit": "24 - 50 g pkgs.", - "UnitPrice": 20, - "UnitsInStock": 10, - "UnitsOnOrder": 60, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 50, - "ProductName": "Valkoinen suklaa", - "SupplierID": 23, - "CategoryID": 3, - "QuantityPerUnit": "12 - 100 g bars", - "UnitPrice": 16.25, - "UnitsInStock": 65, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 62, - "ProductName": "Tarte au sucre", - "SupplierID": 29, - "CategoryID": 3, - "QuantityPerUnit": "48 pies", - "UnitPrice": 49.3, - "UnitsInStock": 17, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductID": 68, - "ProductName": "Scottish Longbreads", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "10 boxes x 8 pieces", - "UnitPrice": 12.5, - "UnitsInStock": 6, - "UnitsOnOrder": 10, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, - { - "ProductName": "Dairy Products", - "UnitPrice": 28.73, - "UnitsInStock": 393, - "locked": true - }, - { - "ProductID": 11, - "ProductName": "Queso Cabrales", - "SupplierID": 5, - "CategoryID": 4, - "QuantityPerUnit": "1 kg pkg.", - "UnitPrice": 21, - "UnitsInStock": 22, - "UnitsOnOrder": 30, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 12, - "ProductName": "Queso Manchego La Pastora", - "SupplierID": 5, - "CategoryID": 4, - "QuantityPerUnit": "10 - 500 g pkgs.", - "UnitPrice": 38, - "UnitsInStock": 86, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 31, - "ProductName": "Gorgonzola Telino", - "SupplierID": 14, - "CategoryID": 4, - "QuantityPerUnit": "12 - 100 g pkgs", - "UnitPrice": 12.5, - "UnitsInStock": 0, - "UnitsOnOrder": 70, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 32, - "ProductName": "Mascarpone Fabioli", - "SupplierID": 14, - "CategoryID": 4, - "QuantityPerUnit": "24 - 200 g pkgs.", - "UnitPrice": 32, - "UnitsInStock": 9, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 33, - "ProductName": "Geitost", - "SupplierID": 15, - "CategoryID": 4, - "QuantityPerUnit": "500 g", - "UnitPrice": 2.5, - "UnitsInStock": 112, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 59, - "ProductName": "Raclette Courdavault", - "SupplierID": 28, - "CategoryID": 4, - "QuantityPerUnit": "5 kg pkg.", - "UnitPrice": 55, - "UnitsInStock": 79, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 60, - "ProductName": "Camembert Pierrot", - "SupplierID": 28, - "CategoryID": 4, - "QuantityPerUnit": "15 - 300 g rounds", - "UnitPrice": 34, - "UnitsInStock": 19, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 69, - "ProductName": "Gudbrandsdalsost", - "SupplierID": 15, - "CategoryID": 4, - "QuantityPerUnit": "10 kg pkg.", - "UnitPrice": 36, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 71, - "ProductName": "Flotemysost", - "SupplierID": 15, - "CategoryID": 4, - "QuantityPerUnit": "10 - 500 g pkgs.", - "UnitPrice": 21.5, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductID": 72, - "ProductName": "Mozzarella di Giovanni", - "SupplierID": 14, - "CategoryID": 4, - "QuantityPerUnit": "24 - 200 g pkgs.", - "UnitPrice": 34.8, - "UnitsInStock": 14, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, - { - "ProductName": "Grains/Cereals", - "UnitPrice": 20.25, - "UnitsInStock": 308, - "locked": true - }, - { - "ProductID": 22, - "ProductName": "Gustaf's Knäckebröd", - "SupplierID": 9, - "CategoryID": 5, - "QuantityPerUnit": "24 - 500 g pkgs.", - "UnitPrice": 21, - "UnitsInStock": 104, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, - { - "ProductID": 23, - "ProductName": "Tunnbröd", - "SupplierID": 9, - "CategoryID": 5, - "QuantityPerUnit": "12 - 250 g pkgs.", - "UnitPrice": 9, - "UnitsInStock": 61, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, - { - "ProductID": 42, - "ProductName": "Singaporean Hokkien Fried Mee", - "SupplierID": 20, - "CategoryID": 5, - "QuantityPerUnit": "32 - 1 kg pkgs.", - "UnitPrice": 14, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, - { - "ProductID": 52, - "ProductName": "Filo Mix", - "SupplierID": 24, - "CategoryID": 5, - "QuantityPerUnit": "16 - 2 kg boxes", - "UnitPrice": 7, - "UnitsInStock": 38, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, - { - "ProductID": 56, - "ProductName": "Gnocchi di nonna Alice", - "SupplierID": 26, - "CategoryID": 5, - "QuantityPerUnit": "24 - 250 g pkgs.", - "UnitPrice": 38, - "UnitsInStock": 21, - "UnitsOnOrder": 10, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, - { - "ProductID": 57, - "ProductName": "Ravioli Angelo", - "SupplierID": 26, - "CategoryID": 5, - "QuantityPerUnit": "24 - 250 g pkgs.", - "UnitPrice": 19.5, - "UnitsInStock": 36, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, - { - "ProductID": 64, - "ProductName": "Wimmers gute Semmelknödel", - "SupplierID": 12, - "CategoryID": 5, - "QuantityPerUnit": "20 bags x 4 pieces", - "UnitPrice": 33.25, - "UnitsInStock": 22, - "UnitsOnOrder": 80, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, - { - "ProductName": "Meat/Poultry", - "UnitPrice": 54.00666666666667, - "UnitsInStock": 165, - "locked": true - }, - { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, - { - "ProductID": 17, - "ProductName": "Alice Mutton", - "SupplierID": 7, - "CategoryID": 6, - "QuantityPerUnit": "20 - 1 kg tins", - "UnitPrice": 39, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, - { - "ProductID": 29, - "ProductName": "Thüringer Rostbratwurst", - "SupplierID": 12, - "CategoryID": 6, - "QuantityPerUnit": "50 bags x 30 sausgs.", - "UnitPrice": 123.79, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, - { - "ProductID": 53, - "ProductName": "Perth Pasties", - "SupplierID": 24, - "CategoryID": 6, - "QuantityPerUnit": "48 pieces", - "UnitPrice": 32.8, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, - { - "ProductID": 54, - "ProductName": "Tourtière", - "SupplierID": 25, - "CategoryID": 6, - "QuantityPerUnit": "16 pies", - "UnitPrice": 7.45, - "UnitsInStock": 21, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, - { - "ProductID": 55, - "ProductName": "Pâté chinois", - "SupplierID": 25, - "CategoryID": 6, - "QuantityPerUnit": "24 boxes x 2 pies", - "UnitPrice": 24, - "UnitsInStock": 115, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, - { - "ProductName": "Produce", - "UnitPrice": 32.37, - "UnitsInStock": 100, - "locked": true - }, - { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductID": 14, - "ProductName": "Tofu", - "SupplierID": 6, - "CategoryID": 7, - "QuantityPerUnit": "40 - 100 g pkgs.", - "UnitPrice": 23.25, - "UnitsInStock": 35, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductID": 28, - "ProductName": "Rössle Sauerkraut", - "SupplierID": 12, - "CategoryID": 7, - "QuantityPerUnit": "25 - 825 g cans", - "UnitPrice": 45.6, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductID": 51, - "ProductName": "Manjimup Dried Apples", - "SupplierID": 24, - "CategoryID": 7, - "QuantityPerUnit": "50 - 300 g pkgs.", - "UnitPrice": 53, - "UnitsInStock": 20, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductID": 74, - "ProductName": "Longlife Tofu", - "SupplierID": 4, - "CategoryID": 7, - "QuantityPerUnit": "5 kg pkg.", - "UnitPrice": 10, - "UnitsInStock": 4, - "UnitsOnOrder": 20, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, - { - "ProductName": "Seafood", - "UnitPrice": 20.6825, - "UnitsInStock": 701, - "locked": true - }, - { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 13, - "ProductName": "Konbu", - "SupplierID": 6, - "CategoryID": 8, - "QuantityPerUnit": "2 kg box", - "UnitPrice": 6, - "UnitsInStock": 24, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 18, - "ProductName": "Carnarvon Tigers", - "SupplierID": 7, - "CategoryID": 8, - "QuantityPerUnit": "16 kg pkg.", - "UnitPrice": 62.5, - "UnitsInStock": 42, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 30, - "ProductName": "Nord-Ost Matjeshering", - "SupplierID": 13, - "CategoryID": 8, - "QuantityPerUnit": "10 - 200 g glasses", - "UnitPrice": 25.89, - "UnitsInStock": 10, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 36, - "ProductName": "Inlagd Sill", - "SupplierID": 17, - "CategoryID": 8, - "QuantityPerUnit": "24 - 250 g jars", - "UnitPrice": 19, - "UnitsInStock": 112, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 37, - "ProductName": "Gravad lax", - "SupplierID": 17, - "CategoryID": 8, - "QuantityPerUnit": "12 - 500 g pkgs.", - "UnitPrice": 26, - "UnitsInStock": 11, - "UnitsOnOrder": 50, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 40, - "ProductName": "Boston Crab Meat", - "SupplierID": 19, - "CategoryID": 8, - "QuantityPerUnit": "24 - 4 oz tins", - "UnitPrice": 18.4, - "UnitsInStock": 123, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 41, - "ProductName": "Jack's New England Clam Chowder", - "SupplierID": 19, - "CategoryID": 8, - "QuantityPerUnit": "12 - 12 oz cans", - "UnitPrice": 9.65, - "UnitsInStock": 85, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 45, - "ProductName": "Rogede sild", - "SupplierID": 21, - "CategoryID": 8, - "QuantityPerUnit": "1k pkg.", - "UnitPrice": 9.5, - "UnitsInStock": 5, - "UnitsOnOrder": 70, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 46, - "ProductName": "Spegesild", - "SupplierID": 21, - "CategoryID": 8, - "QuantityPerUnit": "4 - 450 g glasses", - "UnitPrice": 12, - "UnitsInStock": 95, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 58, - "ProductName": "Escargots de Bourgogne", - "SupplierID": 27, - "CategoryID": 8, - "QuantityPerUnit": "24 pieces", - "UnitPrice": 13.25, - "UnitsInStock": 62, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, - { - "ProductID": 73, - "ProductName": "Röd Kaviar", - "SupplierID": 17, - "CategoryID": 8, - "QuantityPerUnit": "24 - 150 g jars", - "UnitPrice": 15, - "UnitsInStock": 101, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - } - ] - \ No newline at end of file diff --git a/docs/knowledge-base/examples/shared/shared-products.json b/docs/knowledge-base/examples/shared/shared-products.json deleted file mode 100644 index ba7e76eb..00000000 --- a/docs/knowledge-base/examples/shared/shared-products.json +++ /dev/null @@ -1,1235 +0,0 @@ - -[{ - "ProductID" : 1, - "ProductName" : "Chai", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "10 boxes x 20 bags", - "UnitPrice" : 18.0000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 2, - "ProductName" : "Chang", - "SupplierID" : 1, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 19.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 3, - "ProductName" : "Aniseed Syrup", - "SupplierID" : 1, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 550 ml bottles", - "UnitPrice" : 10.0000, - "UnitsInStock" : 13, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 4, - "ProductName" : "Chef Anton's Cajun Seasoning", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "48 - 6 oz jars", - "UnitPrice" : 22.0000, - "UnitsInStock" : 53, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 5, - "ProductName" : "Chef Anton's Gumbo Mix", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "36 boxes", - "UnitPrice" : 21.3500, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 6, - "ProductName" : "Grandma's Boysenberry Spread", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 8 oz jars", - "UnitPrice" : 25.0000, - "UnitsInStock" : 120, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 7, - "ProductName" : "Uncle Bob's Organic Dried Pears", - "SupplierID" : 3, - "CategoryID" : 7, - "QuantityPerUnit" : "12 - 1 lb pkgs.", - "UnitPrice" : 30.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 8, - "ProductName" : "Northwoods Cranberry Sauce", - "SupplierID" : 3, - "CategoryID" : 2, - "QuantityPerUnit" : "12 - 12 oz jars", - "UnitPrice" : 40.0000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 9, - "ProductName" : "Mishi Kobe Niku", - "SupplierID" : 4, - "CategoryID" : 6, - "QuantityPerUnit" : "18 - 500 g pkgs.", - "UnitPrice" : 97.0000, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 10, - "ProductName" : "Ikura", - "SupplierID" : 4, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 200 ml jars", - "UnitPrice" : 31.0000, - "UnitsInStock" : 31, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 11, - "ProductName" : "Queso Cabrales", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "1 kg pkg.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 22, - "UnitsOnOrder" : 30, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 12, - "ProductName" : "Queso Manchego La Pastora", - "SupplierID" : 5, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 86, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 13, - "ProductName" : "Konbu", - "SupplierID" : 6, - "CategoryID" : 8, - "QuantityPerUnit" : "2 kg box", - "UnitPrice" : 6.0000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 14, - "ProductName" : "Tofu", - "SupplierID" : 6, - "CategoryID" : 7, - "QuantityPerUnit" : "40 - 100 g pkgs.", - "UnitPrice" : 23.2500, - "UnitsInStock" : 35, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 15, - "ProductName" : "Genen Shouyu", - "SupplierID" : 6, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 250 ml bottles", - "UnitPrice" : 15.5000, - "UnitsInStock" : 39, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 16, - "ProductName" : "Pavlova", - "SupplierID" : 7, - "CategoryID" : 3, - "QuantityPerUnit" : "32 - 500 g boxes", - "UnitPrice" : 17.4500, - "UnitsInStock" : 29, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 17, - "ProductName" : "Alice Mutton", - "SupplierID" : 7, - "CategoryID" : 6, - "QuantityPerUnit" : "20 - 1 kg tins", - "UnitPrice" : 39.0000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 18, - "ProductName" : "Carnarvon Tigers", - "SupplierID" : 7, - "CategoryID" : 8, - "QuantityPerUnit" : "16 kg pkg.", - "UnitPrice" : 62.5000, - "UnitsInStock" : 42, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 19, - "ProductName" : "Teatime Chocolate Biscuits", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 12 pieces", - "UnitPrice" : 9.2000, - "UnitsInStock" : 25, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 20, - "ProductName" : "Sir Rodney's Marmalade", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "30 gift boxes", - "UnitPrice" : 81.0000, - "UnitsInStock" : 40, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 21, - "ProductName" : "Sir Rodney's Scones", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "24 pkgs. x 4 pieces", - "UnitPrice" : 10.0000, - "UnitsInStock" : 3, - "UnitsOnOrder" : 40, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 22, - "ProductName" : "Gustaf's Knäckebröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 500 g pkgs.", - "UnitPrice" : 21.0000, - "UnitsInStock" : 104, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 23, - "ProductName" : "Tunnbröd", - "SupplierID" : 9, - "CategoryID" : 5, - "QuantityPerUnit" : "12 - 250 g pkgs.", - "UnitPrice" : 9.0000, - "UnitsInStock" : 61, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 24, - "ProductName" : "Guaraná Fantástica", - "SupplierID" : 10, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 355 ml cans", - "UnitPrice" : 4.5000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 25, - "ProductName" : "NuNuCa Nuß-Nougat-Creme", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "20 - 450 g glasses", - "UnitPrice" : 14.0000, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 26, - "ProductName" : "Gumbär Gummibärchen", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 250 g bags", - "UnitPrice" : 31.2300, - "UnitsInStock" : 15, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 27, - "ProductName" : "Schoggi Schokolade", - "SupplierID" : 11, - "CategoryID" : 3, - "QuantityPerUnit" : "100 - 100 g pieces", - "UnitPrice" : 43.9000, - "UnitsInStock" : 49, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 28, - "ProductName" : "Rössle Sauerkraut", - "SupplierID" : 12, - "CategoryID" : 7, - "QuantityPerUnit" : "25 - 825 g cans", - "UnitPrice" : 45.6000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 29, - "ProductName" : "Thüringer Rostbratwurst", - "SupplierID" : 12, - "CategoryID" : 6, - "QuantityPerUnit" : "50 bags x 30 sausgs.", - "UnitPrice" : 123.7900, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 30, - "ProductName" : "Nord-Ost Matjeshering", - "SupplierID" : 13, - "CategoryID" : 8, - "QuantityPerUnit" : "10 - 200 g glasses", - "UnitPrice" : 25.8900, - "UnitsInStock" : 10, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 31, - "ProductName" : "Gorgonzola Telino", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "12 - 100 g pkgs", - "UnitPrice" : 12.5000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 70, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 32, - "ProductName" : "Mascarpone Fabioli", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 32.0000, - "UnitsInStock" : 9, - "UnitsOnOrder" : 40, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 33, - "ProductName" : "Geitost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "500 g", - "UnitPrice" : 2.5000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 34, - "ProductName" : "Sasquatch Ale", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 111, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 35, - "ProductName" : "Steeleye Stout", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 18.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 36, - "ProductName" : "Inlagd Sill", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 250 g jars", - "UnitPrice" : 19.0000, - "UnitsInStock" : 112, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 37, - "ProductName" : "Gravad lax", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 500 g pkgs.", - "UnitPrice" : 26.0000, - "UnitsInStock" : 11, - "UnitsOnOrder" : 50, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 38, - "ProductName" : "Côte de Blaye", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "12 - 75 cl bottles", - "UnitPrice" : 263.5000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 39, - "ProductName" : "Chartreuse verte", - "SupplierID" : 18, - "CategoryID" : 1, - "QuantityPerUnit" : "750 cc per bottle", - "UnitPrice" : 18.0000, - "UnitsInStock" : 69, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 40, - "ProductName" : "Boston Crab Meat", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 4 oz tins", - "UnitPrice" : 18.4000, - "UnitsInStock" : 123, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 41, - "ProductName" : "Jack's New England Clam Chowder", - "SupplierID" : 19, - "CategoryID" : 8, - "QuantityPerUnit" : "12 - 12 oz cans", - "UnitPrice" : 9.6500, - "UnitsInStock" : 85, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 42, - "ProductName" : "Singaporean Hokkien Fried Mee", - "SupplierID" : 20, - "CategoryID" : 5, - "QuantityPerUnit" : "32 - 1 kg pkgs.", - "UnitPrice" : 14.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 43, - "ProductName" : "Ipoh Coffee", - "SupplierID" : 20, - "CategoryID" : 1, - "QuantityPerUnit" : "16 - 500 g tins", - "UnitPrice" : 46.0000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 10, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 44, - "ProductName" : "Gula Malacca", - "SupplierID" : 20, - "CategoryID" : 2, - "QuantityPerUnit" : "20 - 2 kg bags", - "UnitPrice" : 19.4500, - "UnitsInStock" : 27, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 45, - "ProductName" : "Rogede sild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "1k pkg.", - "UnitPrice" : 9.5000, - "UnitsInStock" : 5, - "UnitsOnOrder" : 70, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 46, - "ProductName" : "Spegesild", - "SupplierID" : 21, - "CategoryID" : 8, - "QuantityPerUnit" : "4 - 450 g glasses", - "UnitPrice" : 12.0000, - "UnitsInStock" : 95, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 47, - "ProductName" : "Zaanse koeken", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 - 4 oz boxes", - "UnitPrice" : 9.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 48, - "ProductName" : "Chocolade", - "SupplierID" : 22, - "CategoryID" : 3, - "QuantityPerUnit" : "10 pkgs.", - "UnitPrice" : 12.7500, - "UnitsInStock" : 15, - "UnitsOnOrder" : 70, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 49, - "ProductName" : "Maxilaku", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "24 - 50 g pkgs.", - "UnitPrice" : 20.0000, - "UnitsInStock" : 10, - "UnitsOnOrder" : 60, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 50, - "ProductName" : "Valkoinen suklaa", - "SupplierID" : 23, - "CategoryID" : 3, - "QuantityPerUnit" : "12 - 100 g bars", - "UnitPrice" : 16.2500, - "UnitsInStock" : 65, - "UnitsOnOrder" : 0, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 51, - "ProductName" : "Manjimup Dried Apples", - "SupplierID" : 24, - "CategoryID" : 7, - "QuantityPerUnit" : "50 - 300 g pkgs.", - "UnitPrice" : 53.0000, - "UnitsInStock" : 20, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 52, - "ProductName" : "Filo Mix", - "SupplierID" : 24, - "CategoryID" : 5, - "QuantityPerUnit" : "16 - 2 kg boxes", - "UnitPrice" : 7.0000, - "UnitsInStock" : 38, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 53, - "ProductName" : "Perth Pasties", - "SupplierID" : 24, - "CategoryID" : 6, - "QuantityPerUnit" : "48 pieces", - "UnitPrice" : 32.8000, - "UnitsInStock" : 0, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : true, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 54, - "ProductName" : "Tourtière", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "16 pies", - "UnitPrice" : 7.4500, - "UnitsInStock" : 21, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 55, - "ProductName" : "Pâté chinois", - "SupplierID" : 25, - "CategoryID" : 6, - "QuantityPerUnit" : "24 boxes x 2 pies", - "UnitPrice" : 24.0000, - "UnitsInStock" : 115, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 6, - "CategoryName" : "Meat/Poultry", - "Description" : "Prepared meats" - } -}, { - "ProductID" : 56, - "ProductName" : "Gnocchi di nonna Alice", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 38.0000, - "UnitsInStock" : 21, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 57, - "ProductName" : "Ravioli Angelo", - "SupplierID" : 26, - "CategoryID" : 5, - "QuantityPerUnit" : "24 - 250 g pkgs.", - "UnitPrice" : 19.5000, - "UnitsInStock" : 36, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 58, - "ProductName" : "Escargots de Bourgogne", - "SupplierID" : 27, - "CategoryID" : 8, - "QuantityPerUnit" : "24 pieces", - "UnitPrice" : 13.2500, - "UnitsInStock" : 62, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 59, - "ProductName" : "Raclette Courdavault", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 55.0000, - "UnitsInStock" : 79, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 60, - "ProductName" : "Camembert Pierrot", - "SupplierID" : 28, - "CategoryID" : 4, - "QuantityPerUnit" : "15 - 300 g rounds", - "UnitPrice" : 34.0000, - "UnitsInStock" : 19, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 61, - "ProductName" : "Sirop d'érable", - "SupplierID" : 29, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 500 ml bottles", - "UnitPrice" : 28.5000, - "UnitsInStock" : 113, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 62, - "ProductName" : "Tarte au sucre", - "SupplierID" : 29, - "CategoryID" : 3, - "QuantityPerUnit" : "48 pies", - "UnitPrice" : 49.3000, - "UnitsInStock" : 17, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 63, - "ProductName" : "Vegie-spread", - "SupplierID" : 7, - "CategoryID" : 2, - "QuantityPerUnit" : "15 - 625 g jars", - "UnitPrice" : 43.9000, - "UnitsInStock" : 24, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 64, - "ProductName" : "Wimmers gute Semmelknödel", - "SupplierID" : 12, - "CategoryID" : 5, - "QuantityPerUnit" : "20 bags x 4 pieces", - "UnitPrice" : 33.2500, - "UnitsInStock" : 22, - "UnitsOnOrder" : 80, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 5, - "CategoryName" : "Grains/Cereals", - "Description" : "Breads, crackers, pasta, and cereal" - } -}, { - "ProductID" : 65, - "ProductName" : "Louisiana Fiery Hot Pepper Sauce", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "32 - 8 oz bottles", - "UnitPrice" : 21.0500, - "UnitsInStock" : 76, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 66, - "ProductName" : "Louisiana Hot Spiced Okra", - "SupplierID" : 2, - "CategoryID" : 2, - "QuantityPerUnit" : "24 - 8 oz jars", - "UnitPrice" : 17.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 100, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}, { - "ProductID" : 67, - "ProductName" : "Laughing Lumberjack Lager", - "SupplierID" : 16, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 12 oz bottles", - "UnitPrice" : 14.0000, - "UnitsInStock" : 52, - "UnitsOnOrder" : 0, - "ReorderLevel" : 10, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 68, - "ProductName" : "Scottish Longbreads", - "SupplierID" : 8, - "CategoryID" : 3, - "QuantityPerUnit" : "10 boxes x 8 pieces", - "UnitPrice" : 12.5000, - "UnitsInStock" : 6, - "UnitsOnOrder" : 10, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 3, - "CategoryName" : "Confections", - "Description" : "Desserts, candies, and sweet breads" - } -}, { - "ProductID" : 69, - "ProductName" : "Gudbrandsdalsost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 kg pkg.", - "UnitPrice" : 36.0000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 70, - "ProductName" : "Outback Lager", - "SupplierID" : 7, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 355 ml bottles", - "UnitPrice" : 15.0000, - "UnitsInStock" : 15, - "UnitsOnOrder" : 10, - "ReorderLevel" : 30, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 71, - "ProductName" : "Flotemysost", - "SupplierID" : 15, - "CategoryID" : 4, - "QuantityPerUnit" : "10 - 500 g pkgs.", - "UnitPrice" : 21.5000, - "UnitsInStock" : 26, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 72, - "ProductName" : "Mozzarella di Giovanni", - "SupplierID" : 14, - "CategoryID" : 4, - "QuantityPerUnit" : "24 - 200 g pkgs.", - "UnitPrice" : 34.8000, - "UnitsInStock" : 14, - "UnitsOnOrder" : 0, - "ReorderLevel" : 0, - "Discontinued" : false, - "Category" : { - "CategoryID" : 4, - "CategoryName" : "Dairy Products", - "Description" : "Cheeses" - } -}, { - "ProductID" : 73, - "ProductName" : "Röd Kaviar", - "SupplierID" : 17, - "CategoryID" : 8, - "QuantityPerUnit" : "24 - 150 g jars", - "UnitPrice" : 15.0000, - "UnitsInStock" : 101, - "UnitsOnOrder" : 0, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 8, - "CategoryName" : "Seafood", - "Description" : "Seaweed and fish" - } -}, { - "ProductID" : 74, - "ProductName" : "Longlife Tofu", - "SupplierID" : 4, - "CategoryID" : 7, - "QuantityPerUnit" : "5 kg pkg.", - "UnitPrice" : 10.0000, - "UnitsInStock" : 4, - "UnitsOnOrder" : 20, - "ReorderLevel" : 5, - "Discontinued" : false, - "Category" : { - "CategoryID" : 7, - "CategoryName" : "Produce", - "Description" : "Dried fruit and bean curd" - } -}, { - "ProductID" : 75, - "ProductName" : "Rhönbräu Klosterbier", - "SupplierID" : 12, - "CategoryID" : 1, - "QuantityPerUnit" : "24 - 0.5 l bottles", - "UnitPrice" : 7.7500, - "UnitsInStock" : 125, - "UnitsOnOrder" : 0, - "ReorderLevel" : 25, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 76, - "ProductName" : "Lakkalikööri", - "SupplierID" : 23, - "CategoryID" : 1, - "QuantityPerUnit" : "500 ml", - "UnitPrice" : 18.0000, - "UnitsInStock" : 57, - "UnitsOnOrder" : 0, - "ReorderLevel" : 20, - "Discontinued" : false, - "Category" : { - "CategoryID" : 1, - "CategoryName" : "Beverages", - "Description" : "Soft drinks, coffees, teas, beers, and ales" - } -}, { - "ProductID" : 77, - "ProductName" : "Original Frankfurter grüne Soße", - "SupplierID" : 12, - "CategoryID" : 2, - "QuantityPerUnit" : "12 boxes", - "UnitPrice" : 13.0000, - "UnitsInStock" : 32, - "UnitsOnOrder" : 0, - "ReorderLevel" : 15, - "Discontinued" : false, - "Category" : { - "CategoryID" : 2, - "CategoryName" : "Condiments", - "Description" : "Sweet and savory sauces, relishes, spreads, and seasonings" - } -}] - diff --git a/docs/knowledge-base/examples/shared/shared-sample-products.js b/docs/knowledge-base/examples/shared/shared-sample-products.js deleted file mode 100644 index 87efd10d..00000000 --- a/docs/knowledge-base/examples/shared/shared-sample-products.js +++ /dev/null @@ -1,182 +0,0 @@ -export const sampleProducts = [ - { - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, - { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, - { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, - { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, - { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, - { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, - { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, - { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, - { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, - { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - } -]; diff --git a/docs/knowledge-base/examples/shared/shared-treeListData.js b/docs/knowledge-base/examples/shared/shared-treeListData.js deleted file mode 100644 index dc7cb276..00000000 --- a/docs/knowledge-base/examples/shared/shared-treeListData.js +++ /dev/null @@ -1,1150 +0,0 @@ -const employees = [ - { - id: 1, - name: "Daryl Sweeney", - reportsTo: null, - phone: "(555) 924-9726", - extension: 8253, - hireDate: new Date(2012, 2, 7), - fullTime: true, - position: "CEO", - timeInPosition: 2, - employees: [ - { - id: 2, - name: "Guy Wooten", - reportsTo: 1, - phone: "(438) 738-4935", - extension: 1155, - hireDate: new Date(2010, 3, 3), - fullTime: true, - position: "Chief Technical Officer", - timeInPosition: 1, - employees: [ - { - id: 32, - name: "Buffy Weber", - reportsTo: 2, - phone: "(699) 838-6121", - extension: 8933, - hireDate: new Date(2011, 7, 11), - fullTime: true, - position: "VP, Engineering", - timeInPosition: 2, - employees: [ - { - id: 11, - name: "Hyacinth Hood", - reportsTo: 32, - phone: "(889) 345-2438", - extension: 8564, - hireDate: new Date(2014, 2, 3), - fullTime: true, - position: "Team Lead", - timeInPosition: 1, - employees: [ - { - id: 60, - name: "Akeem Carr", - reportsTo: 11, - phone: "(738) 136-2814", - extension: 9353, - hireDate: new Date(2011, 4, 21), - fullTime: true, - position: "Junior Software Developer", - timeInPosition: 2 - }, - { - id: 78, - name: "Rinah Simon", - reportsTo: 11, - phone: "(285) 912-5271", - extension: 7795, - hireDate: new Date(2012, 10, 11), - fullTime: true, - position: "Software Developer", - timeInPosition: 4 - } - ] - }, - { - id: 42, - name: "Gage Daniels", - reportsTo: 32, - phone: "(107) 290-6260", - extension: 896, - hireDate: new Date(2013, 5, 16), - fullTime: true, - position: "Software Architect", - timeInPosition: 5 - }, - { - id: 43, - name: "Constance Vazquez", - reportsTo: 32, - phone: "(800) 301-1978", - extension: 5141, - hireDate: new Date(2011, 6, 7), - fullTime: true, - position: "Director, Engineering", - timeInPosition: 1, - employees: [ - { - id: 46, - name: "Darrel Solis", - reportsTo: 43, - phone: "(327) 977-0216", - extension: 7779, - hireDate: new Date(2015, 4, 25), - fullTime: true, - position: "Team Lead", - timeInPosition: 4, - employees: [ - { - id: 47, - name: "Brian Yang", - reportsTo: 46, - phone: "(565) 146-5435", - extension: 3885, - hireDate: new Date(2012, 9, 27), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 3 - }, - { - id: 50, - name: "Lillian Bradshaw", - reportsTo: 46, - phone: "(323) 509-3479", - extension: 5426, - hireDate: new Date(2014, 5, 10), - fullTime: true, - position: "Software Developer", - timeInPosition: 2 - }, - { - id: 51, - name: "Christian Palmer", - reportsTo: 46, - phone: "(490) 421-8718", - extension: 3706, - hireDate: new Date(2012, 12, 27), - fullTime: false, - position: "Technical Lead", - timeInPosition: 1 - }, - { - id: 55, - name: "Summer Mosley", - reportsTo: 46, - phone: "(784) 962-2301", - extension: 5492, - hireDate: new Date(2010, 3, 2), - fullTime: true, - position: "QA Engineer", - timeInPosition: 5 - }, - { - id: 56, - name: "Barry Ayers", - reportsTo: 46, - phone: "(452) 373-9227", - extension: 1308, - hireDate: new Date(2011, 10, 11), - fullTime: true, - position: "Software Developer", - timeInPosition: 4 - }, - { - id: 59, - name: "Keiko Espinoza", - reportsTo: 46, - phone: "(226) 600-5305", - extension: 9363, - hireDate: new Date(2011, 9, 18), - fullTime: true, - position: "Junior QA Engineer", - timeInPosition: 4 - }, - { - id: 61, - name: "Candace Pickett", - reportsTo: 46, - phone: "(120) 117-7475", - extension: 5178, - hireDate: new Date(2010, 5, 6), - fullTime: true, - position: "Support Officer", - timeInPosition: 0 - } - ] - }, - { - id: 63, - name: "Mia Caldwell", - reportsTo: 43, - phone: "(848) 636-6470", - extension: 6368, - hireDate: new Date(2012, 10, 7), - fullTime: true, - position: "Team Lead", - timeInPosition: 4, - employees: [ - { - id: 65, - name: "Thomas Terry", - reportsTo: 63, - phone: "(764) 831-4248", - extension: 3574, - hireDate: new Date(2015, 6, 15), - fullTime: false, - position: "Senior Enterprise Support Officer", - timeInPosition: 2 - }, - { - id: 67, - name: "Ruth Downs", - reportsTo: 63, - phone: "(138) 991-1440", - extension: 8067, - hireDate: new Date(2013, 7, 13), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 5 - }, - { - id: 70, - name: "Yasir Wilder", - reportsTo: 63, - phone: "(759) 701-8665", - extension: 8350, - hireDate: new Date(2010, 11, 8), - fullTime: true, - position: "Senior QA Enginner", - timeInPosition: 3 - }, - { - id: 71, - name: "Flavia Short", - reportsTo: 63, - phone: "(370) 133-9238", - extension: 6390, - hireDate: new Date(2013, 2, 21), - fullTime: true, - position: "Support Officer", - timeInPosition: 0 - }, - { - id: 74, - name: "Aaron Roach", - reportsTo: 63, - phone: "(958) 717-9230", - extension: 4899, - hireDate: new Date(2011, 7, 30), - fullTime: true, - position: "Junior Software Developer", - timeInPosition: 6 - }, - { - id: 75, - name: "Eric Russell", - reportsTo: 63, - phone: "(516) 575-8505", - extension: 2224, - hireDate: new Date(2012, 10, 28), - fullTime: true, - position: "Software Developer", - timeInPosition: 3 - }, - { - id: 76, - name: "Cheyenne Olson", - reportsTo: 63, - phone: "(241) 645-0257", - extension: 9181, - hireDate: new Date(2015, 5, 19), - fullTime: true, - position: "Software Developer", - timeInPosition: 5 - }, - { - id: 77, - name: "Shaine Avila", - reportsTo: 63, - phone: "(844) 435-1360", - extension: 3374, - hireDate: new Date(2010, 1, 31), - fullTime: true, - position: "UI Designer", - timeInPosition: 5 - }, - { - id: 81, - name: "Chantale Long", - reportsTo: 63, - phone: "(252) 419-6891", - extension: 7868, - hireDate: new Date(2010, 6, 17), - fullTime: true, - position: "Senior QA Enginner", - timeInPosition: 1 - }, - { - id: 83, - name: "Dane Cruz", - reportsTo: 63, - phone: "(946) 701-6165", - extension: 3828, - hireDate: new Date(2014, 10, 8), - fullTime: true, - position: "Junior Software Developer", - timeInPosition: 2 - }, - { - id: 84, - name: "Regan Patterson", - reportsTo: 63, - phone: "(265) 946-1765", - extension: 6955, - hireDate: new Date(2012, 3, 1), - fullTime: true, - position: "Technical Writer", - timeInPosition: 6 - }, - { - id: 85, - name: "Drew Mckay", - reportsTo: 63, - phone: "(327) 293-0162", - extension: 6904, - hireDate: new Date(2011, 3, 25), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 3 - }, - { - id: 88, - name: "Bevis Miller", - reportsTo: 63, - phone: "(525) 557-0169", - extension: 6978, - hireDate: new Date(2011, 4, 19), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 5 - }, - { - id: 89, - name: "Bruce Mccarty", - reportsTo: 63, - phone: "(936) 777-8730", - extension: 6552, - hireDate: new Date(2014, 3, 28), - fullTime: true, - position: "Support Officer", - timeInPosition: 5 - } - ] - }, - { - id: 90, - name: "Ocean Blair", - reportsTo: 43, - phone: "(343) 586-6614", - extension: 1424, - hireDate: new Date(2011, 4, 27), - fullTime: true, - position: "Team Lead", - timeInPosition: 2, - employees: [ - { - id: 91, - name: "Guinevere Osborn", - reportsTo: 90, - phone: "(424) 741-0006", - extension: 3166, - hireDate: new Date(2014, 11, 19), - fullTime: true, - position: "Software Developer", - timeInPosition: 3 - }, - { - id: 92, - name: "Olga Strong", - reportsTo: 90, - phone: "(949) 417-1168", - extension: 4568, - hireDate: new Date(2015, 5, 28), - fullTime: true, - position: "Graphic Designer", - timeInPosition: 4 - }, - { - id: 93, - name: "Robert Orr", - reportsTo: 90, - phone: "(977) 341-3721", - extension: 9241, - hireDate: new Date(2012, 8, 20), - fullTime: false, - position: "Support Officer", - timeInPosition: 6 - }, - { - id: 95, - name: "Odette Sears", - reportsTo: 90, - phone: "(264) 818-6576", - extension: 1914, - hireDate: new Date(2013, 7, 5), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 3 - } - ] - } - ] - }, - { - id: 45, - name: "Zelda Medina", - reportsTo: 32, - phone: "(563) 359-6023", - extension: 2600, - hireDate: new Date(2012, 11, 6), - fullTime: true, - position: "QA Architect", - timeInPosition: 2 - } - ] - }, - { - id: 52, - name: "Skyler Cleveland", - reportsTo: 2, - phone: "(217) 280-5300", - extension: 9655, - hireDate: new Date(2014, 11, 10), - fullTime: true, - position: "VP, Engineering", - timeInPosition: 2, - employees: [ - { - id: 40, - name: "Karleigh Garza", - reportsTo: 52, - phone: "(370) 983-8796", - extension: 4044, - hireDate: new Date(2014, 3, 10), - fullTime: true, - position: "Team Lead", - timeInPosition: 1, - employees: [ - { - id: 49, - name: "Elmo Tyson", - reportsTo: 40, - phone: "(344) 496-9555", - extension: 6950, - hireDate: new Date(2014, 9, 18), - fullTime: true, - position: "Software Developer", - timeInPosition: 4 - }, - { - id: 72, - name: "Stacey Lynn", - reportsTo: 40, - phone: "(140) 772-7509", - extension: 8396, - hireDate: new Date(2014, 7, 31), - fullTime: false, - position: "QA Engineer", - timeInPosition: 1, - employees: [ - { - id: 80, - name: "Meredith Parrish", - reportsTo: 72, - phone: "(714) 284-2408", - extension: 7675, - hireDate: new Date(2012, 11, 13), - fullTime: true, - position: "Junior QA Engineer", - timeInPosition: 6 - } - ] - }, - { - id: 96, - name: "Cassady Whitley", - reportsTo: 40, - phone: "(996) 587-8405", - extension: 780, - hireDate: new Date(2013, 5, 7), - fullTime: true, - position: "Software Developer", - timeInPosition: 5 - }, - { - id: 97, - name: "Haviva Campbell", - reportsTo: 40, - phone: "(263) 887-4689", - extension: 2808, - hireDate: new Date(2013, 3, 5), - fullTime: true, - position: "Support Officer", - timeInPosition: 2 - }, - { - id: 98, - name: "Cameron Ayers", - reportsTo: 40, - phone: "(470) 709-8030", - extension: 2893, - hireDate: new Date(2013, 8, 28), - fullTime: true, - position: "Support Officer", - timeInPosition: 3 - }, - { - id: 99, - name: "Martha Sargent", - reportsTo: 40, - phone: "(587) 812-4418", - extension: 5099, - hireDate: new Date(2014, 2, 27), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 3 - }, - { - id: 100, - name: "Darrel Kinney", - reportsTo: 40, - phone: "(888) 483-9606", - extension: 4779, - hireDate: new Date(2014, 3, 24), - fullTime: false, - position: "Graphic Designer", - timeInPosition: 1 - } - ] - }, - { - id: 54, - name: "Kuame Frye", - reportsTo: 52, - phone: "(360) 721-5886", - extension: 2730, - hireDate: new Date(2010, 11, 17), - fullTime: true, - position: "Software Architect", - timeInPosition: 1, - employees: [ - { - id: 64, - name: "Ori Wynn", - reportsTo: 54, - phone: "(366) 342-0166", - extension: 7252, - hireDate: new Date(2015, 6, 21), - fullTime: true, - position: "Team Lead", - timeInPosition: 0, - employees: [ - { - id: 6, - name: "Moses Duncan", - reportsTo: 64, - phone: "(421) 611-4814", - extension: 669, - hireDate: new Date(2010, 5, 24), - fullTime: true, - position: "Software Developer", - timeInPosition: 6 - }, - { - id: 12, - name: "Jamalia Wallace", - reportsTo: 64, - phone: "(611) 391-8016", - extension: 1952, - hireDate: new Date(2011, 9, 8), - fullTime: true, - position: "Junior Designer", - timeInPosition: 3 - }, - { - id: 62, - name: "Palmer Gregory", - reportsTo: 64, - phone: "(360) 430-2505", - extension: 4337, - hireDate: new Date(2014, 8, 30), - fullTime: true, - position: "Designer", - timeInPosition: 4 - }, - { - id: 68, - name: "Mallory Gilliam", - reportsTo: 64, - phone: "(878) 423-2971", - extension: 1341, - hireDate: new Date(2014, 7, 24), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 1 - }, - { - id: 73, - name: "Ima Hughes", - reportsTo: 64, - phone: "(905) 485-8001", - extension: 1273, - hireDate: new Date(2013, 6, 3), - fullTime: true, - position: "Software Developer", - timeInPosition: 0 - }, - { - id: 79, - name: "Duncan Mathews", - reportsTo: 64, - phone: "(790) 971-9709", - extension: 4573, - hireDate: new Date(2011, 8, 21), - fullTime: false, - position: "Software Developer", - timeInPosition: 3 - } - ] - } - ] - }, - { - id: 69, - name: "Sierra Beasley", - reportsTo: 52, - phone: "(271) 953-1968", - extension: 3324, - hireDate: new Date(2011, 4, 2), - fullTime: true, - position: "Team Lead", - timeInPosition: 3, - employees: [ - { - id: 38, - name: "Elton Tucker", - reportsTo: 69, - phone: "(988) 930-9331", - extension: 9216, - hireDate: new Date(2015, 6, 4), - fullTime: true, - position: "Support Officer", - timeInPosition: 1 - }, - { - id: 39, - name: "Iona Brennan", - reportsTo: 69, - phone: "(356) 563-0600", - extension: 5634, - hireDate: new Date(2010, 9, 23), - fullTime: true, - position: "Junior Support Officer", - timeInPosition: 4 - }, - { - id: 53, - name: "Paul Campos", - reportsTo: 69, - phone: "(899) 205-1689", - extension: 8586, - hireDate: new Date(2011, 3, 17), - fullTime: true, - position: "Interaction Designer", - timeInPosition: 4, - employees: [ - { - id: 66, - name: "Gloria Freeman", - reportsTo: 53, - phone: "(344) 950-9168", - extension: 4738, - hireDate: new Date(2013, 5, 6), - fullTime: true, - position: "Junior Interaction Designer", - timeInPosition: 0 - } - ] - }, - { - id: 57, - name: "Alyssa Hansen", - reportsTo: 69, - phone: "(548) 925-4799", - extension: 4716, - hireDate: new Date(2011, 1, 19), - fullTime: true, - position: "Junior Software Developer", - timeInPosition: 6 - }, - { - id: 82, - name: "Yael Walters", - reportsTo: 69, - phone: "(311) 489-8191", - extension: 6520, - hireDate: new Date(2013, 7, 4), - fullTime: true, - position: "Software Developer", - timeInPosition: 6 - }, - { - id: 87, - name: "Dahlia Hunt", - reportsTo: 69, - phone: "(720) 339-5202", - extension: 3690, - hireDate: new Date(2011, 3, 26), - fullTime: true, - position: "Senior Software Developer", - timeInPosition: 4 - }, - { - id: 94, - name: "Adria Stanley", - reportsTo: 69, - phone: "(536) 357-6391", - extension: 3374, - hireDate: new Date(2014, 7, 26), - fullTime: true, - position: "Software Developer", - timeInPosition: 0 - } - ] - } - ] - } - ] - }, - { - id: 3, - name: "Priscilla Frank", - reportsTo: 1, - phone: "(278) 927-2684", - extension: 4183, - hireDate: new Date(2014, 11, 30), - fullTime: true, - position: "Chief Product Officer", - timeInPosition: 2, - employees: [ - { - id: 4, - name: "Ursula Holmes", - reportsTo: 3, - phone: "(302) 760-2034", - extension: 2226, - hireDate: new Date(2011, 6, 6), - fullTime: true, - position: "EVP, Product Strategy", - timeInPosition: 4 - }, - { - id: 24, - name: "Melvin Carrillo", - reportsTo: 3, - phone: "(348) 933-5167", - extension: 2482, - hireDate: new Date(2014, 7, 21), - fullTime: true, - position: "Director, Developer Relations", - timeInPosition: 6, - employees: [ - { - id: 29, - name: "Martha Chavez", - reportsTo: 24, - phone: "(860) 754-3464", - extension: 4531, - hireDate: new Date(2013, 3, 12), - fullTime: true, - position: "Developer Advocate", - timeInPosition: 0 - }, - { - id: 30, - name: "Oren Fox", - reportsTo: 24, - phone: "(572) 414-3299", - extension: 4849, - hireDate: new Date(2013, 5, 14), - fullTime: false, - position: "Developer Advocate", - timeInPosition: 0 - }, - { - id: 41, - name: "Amos Barr", - reportsTo: 24, - phone: "(470) 381-3718", - extension: 7643, - hireDate: new Date(2010, 3, 9), - fullTime: true, - position: "Developer Advocate", - timeInPosition: 2 - } - ] - } - ] - }, - { - id: 5, - name: "Anika Vega", - reportsTo: 1, - phone: "(910) 714-1802", - extension: 6353, - hireDate: new Date(2010, 2, 25), - fullTime: true, - position: "Chief Process Officer", - timeInPosition: 5, - employees: [ - { - id: 10, - name: "Vernon Ballard", - reportsTo: 5, - phone: "(702) 185-8890", - extension: 9242, - hireDate: new Date(2015, 6, 26), - fullTime: true, - position: "Director Facilities", - timeInPosition: 2, - employees: [ - { - id: 16, - name: "Ali Guy", - reportsTo: 10, - phone: "(429) 912-6578", - extension: 2225, - hireDate: new Date(2014, 6, 29), - fullTime: true, - position: "Operations Manager", - timeInPosition: 4, - employees: [ - { - id: 23, - name: "Bruce Reilly", - reportsTo: 16, - phone: "(995) 243-7302", - extension: 4815, - hireDate: new Date(2015, 4, 1), - fullTime: true, - position: "Head of Security", - timeInPosition: 1, - employees: [ - { - id: 26, - name: "Rowan Morin", - reportsTo: 23, - phone: "(792) 141-4374", - extension: 1844, - hireDate: new Date(2015, 7, 30), - fullTime: true, - position: "Building Security", - timeInPosition: 5 - }, - { - id: 44, - name: "Benedict Soto", - reportsTo: 23, - phone: "(822) 282-5991", - extension: 6422, - hireDate: new Date(2012, 6, 1), - fullTime: false, - position: "Building Security", - timeInPosition: 4 - } - ] - }, - { - id: 48, - name: "Maryam Rios", - reportsTo: 16, - phone: "(673) 764-6720", - extension: 531, - hireDate: new Date(2014, 3, 3), - fullTime: true, - position: "Team Lead, Personal Assistants", - timeInPosition: 1, - employees: [ - { - id: 58, - name: "Rose Mcintyre", - reportsTo: 48, - phone: "(771) 615-4590", - extension: 7094, - hireDate: new Date(2015, 6, 30), - fullTime: false, - position: "Personal Assistant", - timeInPosition: 6 - } - ] - } - ] - } - ] - } - ] - }, - { - id: 7, - name: "Nevada Hart", - reportsTo: 1, - phone: "(254) 220-1576", - extension: 6649, - hireDate: new Date(2015, 8, 17), - fullTime: true, - position: "Chief Financial Officer", - timeInPosition: 6, - employees: [ - { - id: 14, - name: "Zena Sanford", - reportsTo: 7, - phone: "(437) 568-8160", - extension: 4452, - hireDate: new Date(2010, 11, 30), - fullTime: true, - position: "VP, Finance", - timeInPosition: 4 - }, - { - id: 15, - name: "Quinlan Howe", - reportsTo: 7, - phone: "(464) 334-9748", - extension: 8722, - hireDate: new Date(2011, 6, 9), - fullTime: false, - position: "Senior Director, Finance", - timeInPosition: 0, - employees: [ - { - id: 17, - name: "Indira Lopez", - reportsTo: 15, - phone: "(301) 368-0938", - extension: 8027, - hireDate: new Date(2013, 8, 18), - fullTime: true, - position: "ERP Team Lead", - timeInPosition: 4, - employees: [ - { - id: 18, - name: "Lareina Lara", - reportsTo: 17, - phone: "(233) 457-7482", - extension: 1996, - hireDate: new Date(2010, 4, 30), - fullTime: true, - position: "ERP Solutions Consultant", - timeInPosition: 6 - }, - { - id: 19, - name: "Maxwell Wise", - reportsTo: 17, - phone: "(570) 494-2531", - extension: 9865, - hireDate: new Date(2012, 5, 19), - fullTime: true, - position: "Systems Engineer", - timeInPosition: 0 - } - ] - }, - { - id: 20, - name: "Hunter Mcbride", - reportsTo: 15, - phone: "(409) 442-7016", - extension: 4284, - hireDate: new Date(2012, 10, 20), - fullTime: true, - position: "Senior Director, Tax", - timeInPosition: 3 - }, - { - id: 21, - name: "Jana Serrano", - reportsTo: 15, - phone: "(910) 718-4620", - extension: 6970, - hireDate: new Date(2010, 4, 2), - fullTime: true, - position: "Financial Planning & Analysis Manager", - timeInPosition: 2 - }, - { - id: 22, - name: "Zachery Shelton", - reportsTo: 15, - phone: "(310) 240-8675", - extension: 4527, - hireDate: new Date(2011, 11, 23), - fullTime: false, - position: "Corporate Finance Controller", - timeInPosition: 6, - employees: [ - { - id: 28, - name: "Cullen Freeman", - reportsTo: 22, - phone: "(136) 554-8814", - extension: 9861, - hireDate: new Date(2014, 3, 15), - fullTime: true, - position: "Treasurer Accountant", - timeInPosition: 2 - }, - { - id: 31, - name: "Quinn Dean", - reportsTo: 22, - phone: "(152) 613-3507", - extension: 6621, - hireDate: new Date(2015, 1, 29), - fullTime: true, - position: "Accountant", - timeInPosition: 6 - }, - { - id: 34, - name: "Samantha Brady", - reportsTo: 22, - phone: "(206) 398-4328", - extension: 1157, - hireDate: new Date(2011, 2, 13), - fullTime: true, - position: "Accountant", - timeInPosition: 2, - employees: [ - { - id: 35, - name: "Tamara Green", - reportsTo: 34, - phone: "(219) 248-2789", - extension: 4880, - hireDate: new Date(2014, 2, 4), - fullTime: true, - position: "Junior Accountant", - timeInPosition: 6 - } - ] - }, - { - id: 36, - name: "Olympia Coleman", - reportsTo: 22, - phone: "(944) 853-6383", - extension: 2136, - hireDate: new Date(2013, 7, 31), - fullTime: true, - position: "Collections Manager", - timeInPosition: 3 - }, - { - id: 37, - name: "Breanna Goodwin", - reportsTo: 22, - phone: "(379) 988-9630", - extension: 5898, - hireDate: new Date(2010, 5, 23), - fullTime: false, - position: "Payroll Specialist", - timeInPosition: 4 - } - ] - }, - { - id: 27, - name: "Curran Travis", - reportsTo: 15, - phone: "(438) 135-8033", - extension: 3841, - hireDate: new Date(2011, 6, 13), - fullTime: true, - position: "Finance Controller", - timeInPosition: 5 - } - ] - } - ] - }, - { - id: 8, - name: "Hunter Fry", - reportsTo: 1, - phone: "(766) 358-9858", - extension: 3741, - hireDate: new Date(2011, 2, 12), - fullTime: false, - position: "General Counsel", - timeInPosition: 3, - employees: [ - { - id: 9, - name: "Kuame Carrillo", - reportsTo: 8, - phone: "(192) 383-1305", - extension: 9228, - hireDate: new Date(2011, 2, 22), - fullTime: true, - position: "Associate General Councel", - timeInPosition: 0 - }, - { - id: 13, - name: "Stacy Todd", - reportsTo: 8, - phone: "(925) 286-3327", - extension: 8565, - hireDate: new Date(2014, 7, 5), - fullTime: true, - position: "Councel", - timeInPosition: 0 - }, - { - id: 33, - name: "Valentine Wyatt", - reportsTo: 8, - phone: "(165) 166-6205", - extension: 3588, - hireDate: new Date(2015, 5, 21), - fullTime: true, - position: "Councel", - timeInPosition: 5 - }, - { - id: 86, - name: "Daniel Mccarthy", - reportsTo: 8, - phone: "(624) 483-6206", - extension: 9112, - hireDate: new Date(2013, 12, 3), - fullTime: false, - position: "Staff Attorney", - timeInPosition: 0 - } - ] - } - ] - } - ]; - - export default employees; - \ No newline at end of file diff --git a/docs/knowledge-base/examples/shared/shared-treelist-data.js b/docs/knowledge-base/examples/shared/shared-treelist-data.js deleted file mode 100644 index cac1e9ff..00000000 --- a/docs/knowledge-base/examples/shared/shared-treelist-data.js +++ /dev/null @@ -1,26 +0,0 @@ -export function generateData(numberOfColumns, columnWidth, numberOfRows, subItemsField) { - const columns = []; - for (let c = 1; c <= numberOfColumns; c++) { - columns.push({ field: 'Field-' + c.toString(), width: columnWidth }); - } - columns[0].expandable = true; - - const data = []; - const reducer = (acc, cur) => { - acc[cur[0]] = cur[0] !== 'id' ? 'Sub ' + cur[1] : cur[0]; - return acc; - }; - - for (let r = 1; r <= numberOfRows; r++) { - const row = { id: r }; - for (let c = 1; c <= numberOfColumns; c++) { - row['Field-' + c] = 'R' + r + ':C' + c; - } - - const subItem = Object.entries(row).reduce(reducer, { }); - row[subItemsField] = [ subItem, { ...subItem }, { ...subItem } ]; - data.push(row); - } - - return { columns, data }; -} diff --git a/docs/knowledge-base/examples/splitbutton/disable-left-part/app.jsx b/docs/knowledge-base/examples/splitbutton/disable-left-part/app.jsx deleted file mode 100644 index 38a00f2f..00000000 --- a/docs/knowledge-base/examples/splitbutton/disable-left-part/app.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import * as React from 'react'; -import { SplitButton } from '@progress/kendo-react-buttons'; - -const App = () => { - const items = ['Item1', 'Item2', 'Item3']; - return ( -
    - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/splitbutton/disable-left-part/main.jsx b/docs/knowledge-base/examples/splitbutton/disable-left-part/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/splitbutton/disable-left-part/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/splitbutton/disable-left-part/styles.css b/docs/knowledge-base/examples/splitbutton/disable-left-part/styles.css deleted file mode 100644 index 36556fd2..00000000 --- a/docs/knowledge-base/examples/splitbutton/disable-left-part/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -.k-button-group > .k-button:first-child:not(:only-child) { - pointer-events: none; - background-color: white; - } \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/app.jsx b/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/app.jsx deleted file mode 100644 index 5c410d64..00000000 --- a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/app.jsx +++ /dev/null @@ -1,103 +0,0 @@ -import React from 'react'; -import { - TreeList, - filterBy, - orderBy, - extendDataItem, - mapTree, -} from '@progress/kendo-react-treelist'; - -import { ColumnMenuCustomCheckboxesColumn } from './checkboxFilterColumnMenu.jsx'; - -import employees from './data'; - -let names = []; -mapTree(employees, 'employees', (item) => { - names.push(item.name); -}); -const ColumnMenuCustomCheckbox = (props) => { - return ; -}; -const subItemsField = 'employees'; -const expandField = 'expanded'; - -const columns = [ - { - field: 'name', - title: 'Name', - width: 320, - expandable: true, - columnMenu: ColumnMenuCustomCheckbox, - }, - { field: 'hireDate', title: 'Hire Date', width: 280, format: '{0:d}' }, - { field: 'timeInPosition', title: 'Year(s) in Position', width: 280 }, - { field: 'fullTime', title: 'Full Time', width: 190 }, -]; - -class App extends React.Component { - state = { - data: [...employees], - filter: [], - sort: [], - expanded: [1, 2, 32], - }; - - onExpandChange = (e) => { - this.setState({ - expanded: e.value - ? this.state.expanded.filter((id) => id !== e.dataItem.id) - : [...this.state.expanded, e.dataItem.id], - }); - }; - - onSortChange = (event) => { - this.setState({ - sort: event.sort, - }); - }; - - handleFilterChange = (event) => { - this.setState({ - filter: event.filter, - }); - }; - - addExpandField = (dataTree) => { - const expanded = this.state.expanded; - return mapTree(dataTree, subItemsField, (item) => - extendDataItem(item, subItemsField, { - [expandField]: expanded.includes(item.id), - }) - ); - }; - - processData = () => { - const { data, filter, sort } = this.state; - - const dataTree = orderBy( - filterBy(data, filter, subItemsField), - sort, - subItemsField - ); - return this.addExpandField(dataTree); - }; - - render() { - return ( - - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/checkboxFilterColumnMenu.jsx b/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/checkboxFilterColumnMenu.jsx deleted file mode 100644 index e517a1c3..00000000 --- a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/checkboxFilterColumnMenu.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react'; -import { ColumnMenuBooleanColumn } from '@progress/kendo-react-data-tools'; -import { Checkbox } from '@progress/kendo-react-inputs'; - -const ColumnMenuCustomCheckboxesFilter = (props) => { - const { filter, onFilterChange, data } = props; - const inputChange = React.useCallback( - (event) => { - const newFilter = { - ...filter, - value: filter.value.includes(event.value) - ? filter.value.filter((f) => f !== event.value) - : [event.value, ...filter.value], - }; - - onFilterChange.call(undefined, event.syntheticEvent, newFilter, filter); - }, - [filter, onFilterChange] - ); - - return ( -
    - {data.map((i) => ( - - - inputChange({ syntheticEvent: event.syntheticEvent, value: i }) - } - checked={filter.value.includes(i)} - label={String(i)} - labelPlacement="after" - /> -
    -
    - ))} -
    - ); -}; - -export const ColumnMenuCustomCheckboxesColumn = (props) => { - const initialFilter = React.useCallback( - (field) => ({ - logic: 'or', - filters: [ - { - operator: (current, values) => values.includes(current), - field, - value: [], - }, - ], - }), - [] - ); - - return ( - ( - - ), - ]} - initialFilter={initialFilter} - /> - ); -}; diff --git a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/data.js b/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/data.js deleted file mode 100644 index 4b9013dd..00000000 --- a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/data.js +++ /dev/null @@ -1,1152 +0,0 @@ - - -const employees = [ - { - "id": 1, - "name": "Daryl Sweeney", - "reportsTo": null, - "phone": "(555) 924-9726", - "extension": 8253, - "hireDate": new Date(2012, 2, 7), - "fullTime": true, - "position": "CEO", - "timeInPosition": 2, - "employees": [ - { - "id": 2, - "name": "Guy Wooten", - "reportsTo": 1, - "phone": "(438) 738-4935", - "extension": 1155, - "hireDate": new Date(2010, 3, 3), - "fullTime": true, - "position": "Chief Technical Officer", - "timeInPosition": 1, - "employees": [ - { - "id": 32, - "name": "Buffy Weber", - "reportsTo": 2, - "phone": "(699) 838-6121", - "extension": 8933, - "hireDate": new Date(2011, 7, 11), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [ - { - "id": 11, - "name": "Hyacinth Hood", - "reportsTo": 32, - "phone": "(889) 345-2438", - "extension": 8564, - "hireDate": new Date(2014, 2, 3), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [ - { - "id": 60, - "name": "Akeem Carr", - "reportsTo": 11, - "phone": "(738) 136-2814", - "extension": 9353, - "hireDate": new Date(2011, 4, 21), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, - { - "id": 78, - "name": "Rinah Simon", - "reportsTo": 11, - "phone": "(285) 912-5271", - "extension": 7795, - "hireDate": new Date(2012, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - } - ] - }, - { - "id": 42, - "name": "Gage Daniels", - "reportsTo": 32, - "phone": "(107) 290-6260", - "extension": 896, - "hireDate": new Date(2013, 5, 16), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 5 - }, - { - "id": 43, - "name": "Constance Vazquez", - "reportsTo": 32, - "phone": "(800) 301-1978", - "extension": 5141, - "hireDate": new Date(2011, 6, 7), - "fullTime": true, - "position": "Director, Engineering", - "timeInPosition": 1, - "employees": [ - { - "id": 46, - "name": "Darrel Solis", - "reportsTo": 43, - "phone": "(327) 977-0216", - "extension": 7779, - "hireDate": new Date(2015, 4, 25), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [ - { - "id": 47, - "name": "Brian Yang", - "reportsTo": 46, - "phone": "(565) 146-5435", - "extension": 3885, - "hireDate": new Date(2012, 9, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, - { - "id": 50, - "name": "Lillian Bradshaw", - "reportsTo": 46, - "phone": "(323) 509-3479", - "extension": 5426, - "hireDate": new Date(2014, 5, 10), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 2 - }, - { - "id": 51, - "name": "Christian Palmer", - "reportsTo": 46, - "phone": "(490) 421-8718", - "extension": 3706, - "hireDate": new Date(2012, 12, 27), - "fullTime": false, - "position": "Technical Lead", - "timeInPosition": 1 - }, - { - "id": 55, - "name": "Summer Mosley", - "reportsTo": 46, - "phone": "(784) 962-2301", - "extension": 5492, - "hireDate": new Date(2010, 3, 2), - "fullTime": true, - "position": "QA Engineer", - "timeInPosition": 5 - }, - { - "id": 56, - "name": "Barry Ayers", - "reportsTo": 46, - "phone": "(452) 373-9227", - "extension": 1308, - "hireDate": new Date(2011, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, - { - "id": 59, - "name": "Keiko Espinoza", - "reportsTo": 46, - "phone": "(226) 600-5305", - "extension": 9363, - "hireDate": new Date(2011, 9, 18), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 4 - }, - { - "id": 61, - "name": "Candace Pickett", - "reportsTo": 46, - "phone": "(120) 117-7475", - "extension": 5178, - "hireDate": new Date(2010, 5, 6), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - } - ] - }, - { - "id": 63, - "name": "Mia Caldwell", - "reportsTo": 43, - "phone": "(848) 636-6470", - "extension": 6368, - "hireDate": new Date(2012, 10, 7), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [ - { - "id": 65, - "name": "Thomas Terry", - "reportsTo": 63, - "phone": "(764) 831-4248", - "extension": 3574, - "hireDate": new Date(2015, 6, 15), - "fullTime": false, - "position": "Senior Enterprise Support Officer", - "timeInPosition": 2 - }, - { - "id": 67, - "name": "Ruth Downs", - "reportsTo": 63, - "phone": "(138) 991-1440", - "extension": 8067, - "hireDate": new Date(2013, 7, 13), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, - { - "id": 70, - "name": "Yasir Wilder", - "reportsTo": 63, - "phone": "(759) 701-8665", - "extension": 8350, - "hireDate": new Date(2010, 11, 8), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 3 - }, - { - "id": 71, - "name": "Flavia Short", - "reportsTo": 63, - "phone": "(370) 133-9238", - "extension": 6390, - "hireDate": new Date(2013, 2, 21), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }, - { - "id": 74, - "name": "Aaron Roach", - "reportsTo": 63, - "phone": "(958) 717-9230", - "extension": 4899, - "hireDate": new Date(2011, 7, 30), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, - { - "id": 75, - "name": "Eric Russell", - "reportsTo": 63, - "phone": "(516) 575-8505", - "extension": 2224, - "hireDate": new Date(2012, 10, 28), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, - { - "id": 76, - "name": "Cheyenne Olson", - "reportsTo": 63, - "phone": "(241) 645-0257", - "extension": 9181, - "hireDate": new Date(2015, 5, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, - { - "id": 77, - "name": "Shaine Avila", - "reportsTo": 63, - "phone": "(844) 435-1360", - "extension": 3374, - "hireDate": new Date(2010, 1, 31), - "fullTime": true, - "position": "UI Designer", - "timeInPosition": 5 - }, - { - "id": 81, - "name": "Chantale Long", - "reportsTo": 63, - "phone": "(252) 419-6891", - "extension": 7868, - "hireDate": new Date(2010, 6, 17), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 1 - }, - { - "id": 83, - "name": "Dane Cruz", - "reportsTo": 63, - "phone": "(946) 701-6165", - "extension": 3828, - "hireDate": new Date(2014, 10, 8), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, - { - "id": 84, - "name": "Regan Patterson", - "reportsTo": 63, - "phone": "(265) 946-1765", - "extension": 6955, - "hireDate": new Date(2012, 3, 1), - "fullTime": true, - "position": "Technical Writer", - "timeInPosition": 6 - }, - { - "id": 85, - "name": "Drew Mckay", - "reportsTo": 63, - "phone": "(327) 293-0162", - "extension": 6904, - "hireDate": new Date(2011, 3, 25), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, - { - "id": 88, - "name": "Bevis Miller", - "reportsTo": 63, - "phone": "(525) 557-0169", - "extension": 6978, - "hireDate": new Date(2011, 4, 19), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, - { - "id": 89, - "name": "Bruce Mccarty", - "reportsTo": 63, - "phone": "(936) 777-8730", - "extension": 6552, - "hireDate": new Date(2014, 3, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 5 - } - ] - }, - { - "id": 90, - "name": "Ocean Blair", - "reportsTo": 43, - "phone": "(343) 586-6614", - "extension": 1424, - "hireDate": new Date(2011, 4, 27), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 2, - "employees": [ - { - "id": 91, - "name": "Guinevere Osborn", - "reportsTo": 90, - "phone": "(424) 741-0006", - "extension": 3166, - "hireDate": new Date(2014, 11, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, - { - "id": 92, - "name": "Olga Strong", - "reportsTo": 90, - "phone": "(949) 417-1168", - "extension": 4568, - "hireDate": new Date(2015, 5, 28), - "fullTime": true, - "position": "Graphic Designer", - "timeInPosition": 4 - }, - { - "id": 93, - "name": "Robert Orr", - "reportsTo": 90, - "phone": "(977) 341-3721", - "extension": 9241, - "hireDate": new Date(2012, 8, 20), - "fullTime": false, - "position": "Support Officer", - "timeInPosition": 6 - }, - { - "id": 95, - "name": "Odette Sears", - "reportsTo": 90, - "phone": "(264) 818-6576", - "extension": 1914, - "hireDate": new Date(2013, 7, 5), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - } - ] - } - ] - }, - { - "id": 45, - "name": "Zelda Medina", - "reportsTo": 32, - "phone": "(563) 359-6023", - "extension": 2600, - "hireDate": new Date(2012, 11, 6), - "fullTime": true, - "position": "QA Architect", - "timeInPosition": 2 - } - ] - }, - { - "id": 52, - "name": "Skyler Cleveland", - "reportsTo": 2, - "phone": "(217) 280-5300", - "extension": 9655, - "hireDate": new Date(2014, 11, 10), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [ - { - "id": 40, - "name": "Karleigh Garza", - "reportsTo": 52, - "phone": "(370) 983-8796", - "extension": 4044, - "hireDate": new Date(2014, 3, 10), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [ - { - "id": 49, - "name": "Elmo Tyson", - "reportsTo": 40, - "phone": "(344) 496-9555", - "extension": 6950, - "hireDate": new Date(2014, 9, 18), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, - { - "id": 72, - "name": "Stacey Lynn", - "reportsTo": 40, - "phone": "(140) 772-7509", - "extension": 8396, - "hireDate": new Date(2014, 7, 31), - "fullTime": false, - "position": "QA Engineer", - "timeInPosition": 1, - "employees": [ - { - "id": 80, - "name": "Meredith Parrish", - "reportsTo": 72, - "phone": "(714) 284-2408", - "extension": 7675, - "hireDate": new Date(2012, 11, 13), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 6 - } - ] - }, - { - "id": 96, - "name": "Cassady Whitley", - "reportsTo": 40, - "phone": "(996) 587-8405", - "extension": 780, - "hireDate": new Date(2013, 5, 7), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, - { - "id": 97, - "name": "Haviva Campbell", - "reportsTo": 40, - "phone": "(263) 887-4689", - "extension": 2808, - "hireDate": new Date(2013, 3, 5), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 2 - }, - { - "id": 98, - "name": "Cameron Ayers", - "reportsTo": 40, - "phone": "(470) 709-8030", - "extension": 2893, - "hireDate": new Date(2013, 8, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 3 - }, - { - "id": 99, - "name": "Martha Sargent", - "reportsTo": 40, - "phone": "(587) 812-4418", - "extension": 5099, - "hireDate": new Date(2014, 2, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, - { - "id": 100, - "name": "Darrel Kinney", - "reportsTo": 40, - "phone": "(888) 483-9606", - "extension": 4779, - "hireDate": new Date(2014, 3, 24), - "fullTime": false, - "position": "Graphic Designer", - "timeInPosition": 1 - } - ] - }, - { - "id": 54, - "name": "Kuame Frye", - "reportsTo": 52, - "phone": "(360) 721-5886", - "extension": 2730, - "hireDate": new Date(2010, 11, 17), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 1, - "employees": [ - { - "id": 64, - "name": "Ori Wynn", - "reportsTo": 54, - "phone": "(366) 342-0166", - "extension": 7252, - "hireDate": new Date(2015, 6, 21), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 0, - "employees": [ - { - "id": 6, - "name": "Moses Duncan", - "reportsTo": 64, - "phone": "(421) 611-4814", - "extension": 669, - "hireDate": new Date(2010, 5, 24), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, - { - "id": 12, - "name": "Jamalia Wallace", - "reportsTo": 64, - "phone": "(611) 391-8016", - "extension": 1952, - "hireDate": new Date(2011, 9, 8), - "fullTime": true, - "position": "Junior Designer", - "timeInPosition": 3 - }, - { - "id": 62, - "name": "Palmer Gregory", - "reportsTo": 64, - "phone": "(360) 430-2505", - "extension": 4337, - "hireDate": new Date(2014, 8, 30), - "fullTime": true, - "position": "Designer", - "timeInPosition": 4 - }, - { - "id": 68, - "name": "Mallory Gilliam", - "reportsTo": 64, - "phone": "(878) 423-2971", - "extension": 1341, - "hireDate": new Date(2014, 7, 24), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 1 - }, - { - "id": 73, - "name": "Ima Hughes", - "reportsTo": 64, - "phone": "(905) 485-8001", - "extension": 1273, - "hireDate": new Date(2013, 6, 3), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }, - { - "id": 79, - "name": "Duncan Mathews", - "reportsTo": 64, - "phone": "(790) 971-9709", - "extension": 4573, - "hireDate": new Date(2011, 8, 21), - "fullTime": false, - "position": "Software Developer", - "timeInPosition": 3 - } - ] - } - ] - }, - { - "id": 69, - "name": "Sierra Beasley", - "reportsTo": 52, - "phone": "(271) 953-1968", - "extension": 3324, - "hireDate": new Date(2011, 4, 2), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 3, - "employees": [ - { - "id": 38, - "name": "Elton Tucker", - "reportsTo": 69, - "phone": "(988) 930-9331", - "extension": 9216, - "hireDate": new Date(2015, 6, 4), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 1 - }, - { - "id": 39, - "name": "Iona Brennan", - "reportsTo": 69, - "phone": "(356) 563-0600", - "extension": 5634, - "hireDate": new Date(2010, 9, 23), - "fullTime": true, - "position": "Junior Support Officer", - "timeInPosition": 4 - }, - { - "id": 53, - "name": "Paul Campos", - "reportsTo": 69, - "phone": "(899) 205-1689", - "extension": 8586, - "hireDate": new Date(2011, 3, 17), - "fullTime": true, - "position": "Interaction Designer", - "timeInPosition": 4, - "employees": [ - { - "id": 66, - "name": "Gloria Freeman", - "reportsTo": 53, - "phone": "(344) 950-9168", - "extension": 4738, - "hireDate": new Date(2013, 5, 6), - "fullTime": true, - "position": "Junior Interaction Designer", - "timeInPosition": 0 - } - ] - }, - { - "id": 57, - "name": "Alyssa Hansen", - "reportsTo": 69, - "phone": "(548) 925-4799", - "extension": 4716, - "hireDate": new Date(2011, 1, 19), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, - { - "id": 82, - "name": "Yael Walters", - "reportsTo": 69, - "phone": "(311) 489-8191", - "extension": 6520, - "hireDate": new Date(2013, 7, 4), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, - { - "id": 87, - "name": "Dahlia Hunt", - "reportsTo": 69, - "phone": "(720) 339-5202", - "extension": 3690, - "hireDate": new Date(2011, 3, 26), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 4 - }, - { - "id": 94, - "name": "Adria Stanley", - "reportsTo": 69, - "phone": "(536) 357-6391", - "extension": 3374, - "hireDate": new Date(2014, 7, 26), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - } - ] - } - ] - } - ] - }, - { - "id": 3, - "name": "Priscilla Frank", - "reportsTo": 1, - "phone": "(278) 927-2684", - "extension": 4183, - "hireDate": new Date(2014, 11, 30), - "fullTime": true, - "position": "Chief Product Officer", - "timeInPosition": 2, - "employees": [ - { - "id": 4, - "name": "Ursula Holmes", - "reportsTo": 3, - "phone": "(302) 760-2034", - "extension": 2226, - "hireDate": new Date(2011, 6, 6), - "fullTime": true, - "position": "EVP, Product Strategy", - "timeInPosition": 4 - }, - { - "id": 24, - "name": "Melvin Carrillo", - "reportsTo": 3, - "phone": "(348) 933-5167", - "extension": 2482, - "hireDate": new Date(2014, 7, 21), - "fullTime": true, - "position": "Director, Developer Relations", - "timeInPosition": 6, - "employees": [ - { - "id": 29, - "name": "Martha Chavez", - "reportsTo": 24, - "phone": "(860) 754-3464", - "extension": 4531, - "hireDate": new Date(2013, 3, 12), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 0 - }, - { - "id": 30, - "name": "Oren Fox", - "reportsTo": 24, - "phone": "(572) 414-3299", - "extension": 4849, - "hireDate": new Date(2013, 5, 14), - "fullTime": false, - "position": "Developer Advocate", - "timeInPosition": 0 - }, - { - "id": 41, - "name": "Amos Barr", - "reportsTo": 24, - "phone": "(470) 381-3718", - "extension": 7643, - "hireDate": new Date(2010, 3, 9), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 2 - } - ] - } - ] - }, - { - "id": 5, - "name": "Anika Vega", - "reportsTo": 1, - "phone": "(910) 714-1802", - "extension": 6353, - "hireDate": new Date(2010, 2, 25), - "fullTime": true, - "position": "Chief Process Officer", - "timeInPosition": 5, - "employees": [ - { - "id": 10, - "name": "Vernon Ballard", - "reportsTo": 5, - "phone": "(702) 185-8890", - "extension": 9242, - "hireDate": new Date(2015, 6, 26), - "fullTime": true, - "position": "Director Facilities", - "timeInPosition": 2, - "employees": [ - { - "id": 16, - "name": "Ali Guy", - "reportsTo": 10, - "phone": "(429) 912-6578", - "extension": 2225, - "hireDate": new Date(2014, 6, 29), - "fullTime": true, - "position": "Operations Manager", - "timeInPosition": 4, - "employees": [ - { - "id": 23, - "name": "Bruce Reilly", - "reportsTo": 16, - "phone": "(995) 243-7302", - "extension": 4815, - "hireDate": new Date(2015, 4, 1), - "fullTime": true, - "position": "Head of Security", - "timeInPosition": 1, - "employees": [ - { - "id": 26, - "name": "Rowan Morin", - "reportsTo": 23, - "phone": "(792) 141-4374", - "extension": 1844, - "hireDate": new Date(2015, 7, 30), - "fullTime": true, - "position": "Building Security", - "timeInPosition": 5 - }, - { - "id": 44, - "name": "Benedict Soto", - "reportsTo": 23, - "phone": "(822) 282-5991", - "extension": 6422, - "hireDate": new Date(2012, 6, 1), - "fullTime": false, - "position": "Building Security", - "timeInPosition": 4 - } - ] - }, - { - "id": 48, - "name": "Maryam Rios", - "reportsTo": 16, - "phone": "(673) 764-6720", - "extension": 531, - "hireDate": new Date(2014, 3, 3), - "fullTime": true, - "position": "Team Lead, Personal Assistants", - "timeInPosition": 1, - "employees": [ - { - "id": 58, - "name": "Rose Mcintyre", - "reportsTo": 48, - "phone": "(771) 615-4590", - "extension": 7094, - "hireDate": new Date(2015, 6, 30), - "fullTime": false, - "position": "Personal Assistant", - "timeInPosition": 6 - } - ] - } - ] - } - ] - } - ] - }, - { - "id": 7, - "name": "Nevada Hart", - "reportsTo": 1, - "phone": "(254) 220-1576", - "extension": 6649, - "hireDate": new Date(2015, 8, 17), - "fullTime": true, - "position": "Chief Financial Officer", - "timeInPosition": 6, - "employees": [ - { - "id": 14, - "name": "Zena Sanford", - "reportsTo": 7, - "phone": "(437) 568-8160", - "extension": 4452, - "hireDate": new Date(2010, 11, 30), - "fullTime": true, - "position": "VP, Finance", - "timeInPosition": 4 - }, - { - "id": 15, - "name": "Quinlan Howe", - "reportsTo": 7, - "phone": "(464) 334-9748", - "extension": 8722, - "hireDate": new Date(2011, 6, 9), - "fullTime": false, - "position": "Senior Director, Finance", - "timeInPosition": 0, - "employees": [ - { - "id": 17, - "name": "Indira Lopez", - "reportsTo": 15, - "phone": "(301) 368-0938", - "extension": 8027, - "hireDate": new Date(2013, 8, 18), - "fullTime": true, - "position": "ERP Team Lead", - "timeInPosition": 4, - "employees": [ - { - "id": 18, - "name": "Lareina Lara", - "reportsTo": 17, - "phone": "(233) 457-7482", - "extension": 1996, - "hireDate": new Date(2010, 4, 30), - "fullTime": true, - "position": "ERP Solutions Consultant", - "timeInPosition": 6 - }, - { - "id": 19, - "name": "Maxwell Wise", - "reportsTo": 17, - "phone": "(570) 494-2531", - "extension": 9865, - "hireDate": new Date(2012, 5, 19), - "fullTime": true, - "position": "Systems Engineer", - "timeInPosition": 0 - } - ] - }, - { - "id": 20, - "name": "Hunter Mcbride", - "reportsTo": 15, - "phone": "(409) 442-7016", - "extension": 4284, - "hireDate": new Date(2012, 10, 20), - "fullTime": true, - "position": "Senior Director, Tax", - "timeInPosition": 3 - }, - { - "id": 21, - "name": "Jana Serrano", - "reportsTo": 15, - "phone": "(910) 718-4620", - "extension": 6970, - "hireDate": new Date(2010, 4, 2), - "fullTime": true, - "position": "Financial Planning & Analysis Manager", - "timeInPosition": 2 - }, - { - "id": 22, - "name": "Zachery Shelton", - "reportsTo": 15, - "phone": "(310) 240-8675", - "extension": 4527, - "hireDate": new Date(2011, 11, 23), - "fullTime": false, - "position": "Corporate Finance Controller", - "timeInPosition": 6, - "employees": [ - { - "id": 28, - "name": "Cullen Freeman", - "reportsTo": 22, - "phone": "(136) 554-8814", - "extension": 9861, - "hireDate": new Date(2014, 3, 15), - "fullTime": true, - "position": "Treasurer Accountant", - "timeInPosition": 2 - }, - { - "id": 31, - "name": "Quinn Dean", - "reportsTo": 22, - "phone": "(152) 613-3507", - "extension": 6621, - "hireDate": new Date(2015, 1, 29), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 6 - }, - { - "id": 34, - "name": "Samantha Brady", - "reportsTo": 22, - "phone": "(206) 398-4328", - "extension": 1157, - "hireDate": new Date(2011, 2, 13), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 2, - "employees": [ - { - "id": 35, - "name": "Tamara Green", - "reportsTo": 34, - "phone": "(219) 248-2789", - "extension": 4880, - "hireDate": new Date(2014, 2, 4), - "fullTime": true, - "position": "Junior Accountant", - "timeInPosition": 6 - } - ] - }, - { - "id": 36, - "name": "Olympia Coleman", - "reportsTo": 22, - "phone": "(944) 853-6383", - "extension": 2136, - "hireDate": new Date(2013, 7, 31), - "fullTime": true, - "position": "Collections Manager", - "timeInPosition": 3 - }, - { - "id": 37, - "name": "Breanna Goodwin", - "reportsTo": 22, - "phone": "(379) 988-9630", - "extension": 5898, - "hireDate": new Date(2010, 5, 23), - "fullTime": false, - "position": "Payroll Specialist", - "timeInPosition": 4 - } - ] - }, - { - "id": 27, - "name": "Curran Travis", - "reportsTo": 15, - "phone": "(438) 135-8033", - "extension": 3841, - "hireDate": new Date(2011, 6, 13), - "fullTime": true, - "position": "Finance Controller", - "timeInPosition": 5 - } - ] - } - ] - }, - { - "id": 8, - "name": "Hunter Fry", - "reportsTo": 1, - "phone": "(766) 358-9858", - "extension": 3741, - "hireDate": new Date(2011, 2, 12), - "fullTime": false, - "position": "General Counsel", - "timeInPosition": 3, - "employees": [ - { - "id": 9, - "name": "Kuame Carrillo", - "reportsTo": 8, - "phone": "(192) 383-1305", - "extension": 9228, - "hireDate": new Date(2011, 2, 22), - "fullTime": true, - "position": "Associate General Councel", - "timeInPosition": 0 - }, - { - "id": 13, - "name": "Stacy Todd", - "reportsTo": 8, - "phone": "(925) 286-3327", - "extension": 8565, - "hireDate": new Date(2014, 7, 5), - "fullTime": true, - "position": "Councel", - "timeInPosition": 0 - }, - { - "id": 33, - "name": "Valentine Wyatt", - "reportsTo": 8, - "phone": "(165) 166-6205", - "extension": 3588, - "hireDate": new Date(2015, 5, 21), - "fullTime": true, - "position": "Councel", - "timeInPosition": 5 - }, - { - "id": 86, - "name": "Daniel Mccarthy", - "reportsTo": 8, - "phone": "(624) 483-6206", - "extension": 9112, - "hireDate": new Date(2013, 12, 3), - "fullTime": false, - "position": "Staff Attorney", - "timeInPosition": 0 - } - ] - } - ] - } -]; - -export default employees; - diff --git a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/main.jsx b/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/custom-columnmenu-checkboxes/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/app.jsx b/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/app.jsx deleted file mode 100644 index f425cc12..00000000 --- a/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/app.jsx +++ /dev/null @@ -1,109 +0,0 @@ -import * as React from "react"; -import { - TreeList, - filterBy, - orderBy, - extendDataItem, - mapTree -} from "@progress/kendo-react-treelist"; - -import { ColumnMenuCustomDateColumn } from "./dateColumnMenu.jsx"; - -import employees from "./shared-treeListData"; - -const subItemsField = "employees"; -const expandField = "expanded"; - -const columns = [ - { - field: "name", - title: "Name", - width: 320, - expandable: true - }, - { - field: "hireDate", - title: "Hire Date", - width: 280, - format: "{0:d}", - columnMenu: ColumnMenuCustomDateColumn - }, - { - field: "timeInPosition", - title: "Year(s) in Position", - width: 280 - }, - { - field: "fullTime", - title: "Full Time", - width: 190 - } -]; - -class App extends React.Component { - state = { - data: [...employees], - filter: [], - sort: [], - expanded: [1, 2, 32] - }; - - onExpandChange = e => { - this.setState({ - expanded: e.value - ? this.state.expanded.filter(id => id !== e.dataItem.id) - : [...this.state.expanded, e.dataItem.id] - }); - }; - - onSortChange = event => { - this.setState({ - sort: event.sort - }); - }; - - handleFilterChange = event => { - this.setState({ - filter: event.filter - }); - }; - - addExpandField = dataTree => { - const expanded = this.state.expanded; - return mapTree(dataTree, subItemsField, item => - extendDataItem(item, subItemsField, { - [expandField]: expanded.includes(item.id) - }) - ); - }; - - processData = () => { - const { data, filter, sort } = this.state; - - const dataTree = orderBy( - filterBy(data, filter, subItemsField), - sort, - subItemsField - ); - return this.addExpandField(dataTree); - }; - - render() { - return ( - - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/dateColumnMenu.jsx b/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/dateColumnMenu.jsx deleted file mode 100644 index c6af0540..00000000 --- a/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/dateColumnMenu.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import * as React from "react"; -import { ColumnMenuDateColumn } from "@progress/kendo-react-data-tools"; -import { DatePicker } from "@progress/kendo-react-dateinputs"; - -const ColumnMenuCustomDateFilter = props => { - const { filter, onFilterChange } = props; - - const dateChange = React.useCallback( - event => - onFilterChange.call( - undefined, - event.syntheticEvent, - { ...filter, value: event.value }, - filter - ), - [filter, onFilterChange] - ); - - var textLabel = "To"; - if (filter.operator == "gte") { - textLabel = "From"; - } - return ( -
    - {textLabel} - -
    - ); -}; - -export const ColumnMenuCustomDateColumn = props => { - const initialFilter = React.useCallback( - field => ({ - logic: "and", - filters: [ - { - field, - operator: "gte", - value: new Date("01/01/2012") - }, - { - field, - operator: "lte", - value: new Date("01/01/2015") - } - ] - }), - [] - ); - return ( - - ); -}; diff --git a/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/main.jsx b/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/custom-columnmenu-date-filter/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/different-row-color-per-level/app.jsx b/docs/knowledge-base/examples/treelist/different-row-color-per-level/app.jsx deleted file mode 100644 index 330be5ac..00000000 --- a/docs/knowledge-base/examples/treelist/different-row-color-per-level/app.jsx +++ /dev/null @@ -1,127 +0,0 @@ -import * as React from 'react'; -import { - TreeList, - orderBy, - filterBy, - mapTree, - extendDataItem, - TreeListTextFilter, - TreeListNumericFilter, - TreeListDateFilter, - TreeListBooleanFilter, -} from '@progress/kendo-react-treelist'; -import employees from './data'; -const subItemsField = 'employees'; -const expandField = 'expanded'; -const columns = [ - { - field: 'name', - title: 'Name', - width: '250px', - filter: TreeListTextFilter, - expandable: true, - }, - { - field: 'hireDate', - title: 'Hire Date', - width: '200px', - format: '{0:d}', - filter: TreeListDateFilter, - }, - { - field: 'timeInPosition', - title: 'Year(s) in Position', - width: '200px', - filter: TreeListNumericFilter, - }, - { - field: 'fullTime', - title: 'Full Time', - width: '100px', - filter: TreeListBooleanFilter, - }, -]; -const App = () => { - const [state, setState] = React.useState({ - data: [...employees], - dataState: { - sort: [ - { - field: 'name', - dir: 'asc', - }, - ], - filter: [], - }, - expanded: [1, 2, 32], - }); - const onExpandChange = (e) => { - setState({ - ...state, - expanded: e.value - ? state.expanded.filter((id) => id !== e.dataItem.id) - : [...state.expanded, e.dataItem.id], - }); - }; - const handleDataStateChange = (event) => { - setState({ - ...state, - dataState: event.dataState, - }); - }; - const addExpandField = (dataTree) => { - const expanded = state.expanded; - return mapTree(dataTree, subItemsField, (item) => - extendDataItem(item, subItemsField, { - [expandField]: expanded.includes(item.id), - }) - ); - }; - const processData = () => { - let { data, dataState } = state; - let filteredData = filterBy(data, dataState.filter, subItemsField); - let sortedData = orderBy(filteredData, dataState.sort, subItemsField); - return addExpandField(sortedData); - }; - - const rowRender = (row, props) => { - let color = '#fff'; - let level = props.level.length; - switch (level) { - case 1: - color = '#ccc'; - break; - case 2: - color = '#ddd'; - break; - case 3: - color = '#eee'; - break; - default: - color = '#fff'; - } - let style = { ...row.props.style, backgroundColor: color }; - return ; - }; - return ( - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treelist/different-row-color-per-level/data.js b/docs/knowledge-base/examples/treelist/different-row-color-per-level/data.js deleted file mode 100644 index ab659696..00000000 --- a/docs/knowledge-base/examples/treelist/different-row-color-per-level/data.js +++ /dev/null @@ -1,1020 +0,0 @@ -const employees = [{ - "id": 1, - "name": "Daryl Sweeney", - "reportsTo": null, - "phone": "(555) 924-9726", - "extension": 8253, - "hireDate": new Date(2012, 2, 7), - "fullTime": true, - "position": "CEO", - "timeInPosition": 2, - "employees": [{ - "id": 2, - "name": "Guy Wooten", - "reportsTo": 1, - "phone": "(438) 738-4935", - "extension": 1155, - "hireDate": new Date(2010, 3, 3), - "fullTime": true, - "position": "Chief Technical Officer", - "timeInPosition": 1, - "employees": [{ - "id": 32, - "name": "Buffy Weber", - "reportsTo": 2, - "phone": "(699) 838-6121", - "extension": 8933, - "hireDate": new Date(2011, 7, 11), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 11, - "name": "Hyacinth Hood", - "reportsTo": 32, - "phone": "(889) 345-2438", - "extension": 8564, - "hireDate": new Date(2014, 2, 3), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 60, - "name": "Akeem Carr", - "reportsTo": 11, - "phone": "(738) 136-2814", - "extension": 9353, - "hireDate": new Date(2011, 4, 21), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 78, - "name": "Rinah Simon", - "reportsTo": 11, - "phone": "(285) 912-5271", - "extension": 7795, - "hireDate": new Date(2012, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }] - }, { - "id": 42, - "name": "Gage Daniels", - "reportsTo": 32, - "phone": "(107) 290-6260", - "extension": 896, - "hireDate": new Date(2013, 5, 16), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 5 - }, { - "id": 43, - "name": "Constance Vazquez", - "reportsTo": 32, - "phone": "(800) 301-1978", - "extension": 5141, - "hireDate": new Date(2011, 6, 7), - "fullTime": true, - "position": "Director, Engineering", - "timeInPosition": 1, - "employees": [{ - "id": 46, - "name": "Darrel Solis", - "reportsTo": 43, - "phone": "(327) 977-0216", - "extension": 7779, - "hireDate": new Date(2015, 4, 25), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 47, - "name": "Brian Yang", - "reportsTo": 46, - "phone": "(565) 146-5435", - "extension": 3885, - "hireDate": new Date(2012, 9, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 50, - "name": "Lillian Bradshaw", - "reportsTo": 46, - "phone": "(323) 509-3479", - "extension": 5426, - "hireDate": new Date(2014, 5, 10), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 2 - }, { - "id": 51, - "name": "Christian Palmer", - "reportsTo": 46, - "phone": "(490) 421-8718", - "extension": 3706, - "hireDate": new Date(2012, 12, 27), - "fullTime": false, - "position": "Technical Lead", - "timeInPosition": 1 - }, { - "id": 55, - "name": "Summer Mosley", - "reportsTo": 46, - "phone": "(784) 962-2301", - "extension": 5492, - "hireDate": new Date(2010, 3, 2), - "fullTime": true, - "position": "QA Engineer", - "timeInPosition": 5 - }, { - "id": 56, - "name": "Barry Ayers", - "reportsTo": 46, - "phone": "(452) 373-9227", - "extension": 1308, - "hireDate": new Date(2011, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 59, - "name": "Keiko Espinoza", - "reportsTo": 46, - "phone": "(226) 600-5305", - "extension": 9363, - "hireDate": new Date(2011, 9, 18), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 4 - }, { - "id": 61, - "name": "Candace Pickett", - "reportsTo": 46, - "phone": "(120) 117-7475", - "extension": 5178, - "hireDate": new Date(2010, 5, 6), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }] - }, { - "id": 63, - "name": "Mia Caldwell", - "reportsTo": 43, - "phone": "(848) 636-6470", - "extension": 6368, - "hireDate": new Date(2012, 10, 7), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 65, - "name": "Thomas Terry", - "reportsTo": 63, - "phone": "(764) 831-4248", - "extension": 3574, - "hireDate": new Date(2015, 6, 15), - "fullTime": false, - "position": "Senior Enterprise Support Officer", - "timeInPosition": 2 - }, { - "id": 67, - "name": "Ruth Downs", - "reportsTo": 63, - "phone": "(138) 991-1440", - "extension": 8067, - "hireDate": new Date(2013, 7, 13), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 70, - "name": "Yasir Wilder", - "reportsTo": 63, - "phone": "(759) 701-8665", - "extension": 8350, - "hireDate": new Date(2010, 11, 8), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 3 - }, { - "id": 71, - "name": "Flavia Short", - "reportsTo": 63, - "phone": "(370) 133-9238", - "extension": 6390, - "hireDate": new Date(2013, 2, 21), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }, { - "id": 74, - "name": "Aaron Roach", - "reportsTo": 63, - "phone": "(958) 717-9230", - "extension": 4899, - "hireDate": new Date(2011, 7, 30), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 75, - "name": "Eric Russell", - "reportsTo": 63, - "phone": "(516) 575-8505", - "extension": 2224, - "hireDate": new Date(2012, 10, 28), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 76, - "name": "Cheyenne Olson", - "reportsTo": 63, - "phone": "(241) 645-0257", - "extension": 9181, - "hireDate": new Date(2015, 5, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 77, - "name": "Shaine Avila", - "reportsTo": 63, - "phone": "(844) 435-1360", - "extension": 3374, - "hireDate": new Date(2010, 1, 31), - "fullTime": true, - "position": "UI Designer", - "timeInPosition": 5 - }, { - "id": 81, - "name": "Chantale Long", - "reportsTo": 63, - "phone": "(252) 419-6891", - "extension": 7868, - "hireDate": new Date(2010, 6, 17), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 1 - }, { - "id": 83, - "name": "Dane Cruz", - "reportsTo": 63, - "phone": "(946) 701-6165", - "extension": 3828, - "hireDate": new Date(2014, 10, 8), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 84, - "name": "Regan Patterson", - "reportsTo": 63, - "phone": "(265) 946-1765", - "extension": 6955, - "hireDate": new Date(2012, 3, 1), - "fullTime": true, - "position": "Technical Writer", - "timeInPosition": 6 - }, { - "id": 85, - "name": "Drew Mckay", - "reportsTo": 63, - "phone": "(327) 293-0162", - "extension": 6904, - "hireDate": new Date(2011, 3, 25), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 88, - "name": "Bevis Miller", - "reportsTo": 63, - "phone": "(525) 557-0169", - "extension": 6978, - "hireDate": new Date(2011, 4, 19), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 89, - "name": "Bruce Mccarty", - "reportsTo": 63, - "phone": "(936) 777-8730", - "extension": 6552, - "hireDate": new Date(2014, 3, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 5 - }] - }, { - "id": 90, - "name": "Ocean Blair", - "reportsTo": 43, - "phone": "(343) 586-6614", - "extension": 1424, - "hireDate": new Date(2011, 4, 27), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 2, - "employees": [{ - "id": 91, - "name": "Guinevere Osborn", - "reportsTo": 90, - "phone": "(424) 741-0006", - "extension": 3166, - "hireDate": new Date(2014, 11, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 92, - "name": "Olga Strong", - "reportsTo": 90, - "phone": "(949) 417-1168", - "extension": 4568, - "hireDate": new Date(2015, 5, 28), - "fullTime": true, - "position": "Graphic Designer", - "timeInPosition": 4 - }, { - "id": 93, - "name": "Robert Orr", - "reportsTo": 90, - "phone": "(977) 341-3721", - "extension": 9241, - "hireDate": new Date(2012, 8, 20), - "fullTime": false, - "position": "Support Officer", - "timeInPosition": 6 - }, { - "id": 95, - "name": "Odette Sears", - "reportsTo": 90, - "phone": "(264) 818-6576", - "extension": 1914, - "hireDate": new Date(2013, 7, 5), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 45, - "name": "Zelda Medina", - "reportsTo": 32, - "phone": "(563) 359-6023", - "extension": 2600, - "hireDate": new Date(2012, 11, 6), - "fullTime": true, - "position": "QA Architect", - "timeInPosition": 2 - }] - }, { - "id": 52, - "name": "Skyler Cleveland", - "reportsTo": 2, - "phone": "(217) 280-5300", - "extension": 9655, - "hireDate": new Date(2014, 11, 10), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 40, - "name": "Karleigh Garza", - "reportsTo": 52, - "phone": "(370) 983-8796", - "extension": 4044, - "hireDate": new Date(2014, 3, 10), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 49, - "name": "Elmo Tyson", - "reportsTo": 40, - "phone": "(344) 496-9555", - "extension": 6950, - "hireDate": new Date(2014, 9, 18), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 72, - "name": "Stacey Lynn", - "reportsTo": 40, - "phone": "(140) 772-7509", - "extension": 8396, - "hireDate": new Date(2014, 7, 31), - "fullTime": false, - "position": "QA Engineer", - "timeInPosition": 1, - "employees": [{ - "id": 80, - "name": "Meredith Parrish", - "reportsTo": 72, - "phone": "(714) 284-2408", - "extension": 7675, - "hireDate": new Date(2012, 11, 13), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 6 - }] - }, { - "id": 96, - "name": "Cassady Whitley", - "reportsTo": 40, - "phone": "(996) 587-8405", - "extension": 780, - "hireDate": new Date(2013, 5, 7), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 97, - "name": "Haviva Campbell", - "reportsTo": 40, - "phone": "(263) 887-4689", - "extension": 2808, - "hireDate": new Date(2013, 3, 5), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 2 - }, { - "id": 98, - "name": "Cameron Ayers", - "reportsTo": 40, - "phone": "(470) 709-8030", - "extension": 2893, - "hireDate": new Date(2013, 8, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 3 - }, { - "id": 99, - "name": "Martha Sargent", - "reportsTo": 40, - "phone": "(587) 812-4418", - "extension": 5099, - "hireDate": new Date(2014, 2, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 100, - "name": "Darrel Kinney", - "reportsTo": 40, - "phone": "(888) 483-9606", - "extension": 4779, - "hireDate": new Date(2014, 3, 24), - "fullTime": false, - "position": "Graphic Designer", - "timeInPosition": 1 - }] - }, { - "id": 54, - "name": "Kuame Frye", - "reportsTo": 52, - "phone": "(360) 721-5886", - "extension": 2730, - "hireDate": new Date(2010, 11, 17), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 1, - "employees": [{ - "id": 64, - "name": "Ori Wynn", - "reportsTo": 54, - "phone": "(366) 342-0166", - "extension": 7252, - "hireDate": new Date(2015, 6, 21), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 0, - "employees": [{ - "id": 6, - "name": "Moses Duncan", - "reportsTo": 64, - "phone": "(421) 611-4814", - "extension": 669, - "hireDate": new Date(2010, 5, 24), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 12, - "name": "Jamalia Wallace", - "reportsTo": 64, - "phone": "(611) 391-8016", - "extension": 1952, - "hireDate": new Date(2011, 9, 8), - "fullTime": true, - "position": "Junior Designer", - "timeInPosition": 3 - }, { - "id": 62, - "name": "Palmer Gregory", - "reportsTo": 64, - "phone": "(360) 430-2505", - "extension": 4337, - "hireDate": new Date(2014, 8, 30), - "fullTime": true, - "position": "Designer", - "timeInPosition": 4 - }, { - "id": 68, - "name": "Mallory Gilliam", - "reportsTo": 64, - "phone": "(878) 423-2971", - "extension": 1341, - "hireDate": new Date(2014, 7, 24), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 1 - }, { - "id": 73, - "name": "Ima Hughes", - "reportsTo": 64, - "phone": "(905) 485-8001", - "extension": 1273, - "hireDate": new Date(2013, 6, 3), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }, { - "id": 79, - "name": "Duncan Mathews", - "reportsTo": 64, - "phone": "(790) 971-9709", - "extension": 4573, - "hireDate": new Date(2011, 8, 21), - "fullTime": false, - "position": "Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 69, - "name": "Sierra Beasley", - "reportsTo": 52, - "phone": "(271) 953-1968", - "extension": 3324, - "hireDate": new Date(2011, 4, 2), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 3, - "employees": [{ - "id": 38, - "name": "Elton Tucker", - "reportsTo": 69, - "phone": "(988) 930-9331", - "extension": 9216, - "hireDate": new Date(2015, 6, 4), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 1 - }, { - "id": 39, - "name": "Iona Brennan", - "reportsTo": 69, - "phone": "(356) 563-0600", - "extension": 5634, - "hireDate": new Date(2010, 9, 23), - "fullTime": true, - "position": "Junior Support Officer", - "timeInPosition": 4 - }, { - "id": 53, - "name": "Paul Campos", - "reportsTo": 69, - "phone": "(899) 205-1689", - "extension": 8586, - "hireDate": new Date(2011, 3, 17), - "fullTime": true, - "position": "Interaction Designer", - "timeInPosition": 4, - "employees": [{ - "id": 66, - "name": "Gloria Freeman", - "reportsTo": 53, - "phone": "(344) 950-9168", - "extension": 4738, - "hireDate": new Date(2013, 5, 6), - "fullTime": true, - "position": "Junior Interaction Designer", - "timeInPosition": 0 - }] - }, { - "id": 57, - "name": "Alyssa Hansen", - "reportsTo": 69, - "phone": "(548) 925-4799", - "extension": 4716, - "hireDate": new Date(2011, 1, 19), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 82, - "name": "Yael Walters", - "reportsTo": 69, - "phone": "(311) 489-8191", - "extension": 6520, - "hireDate": new Date(2013, 7, 4), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 87, - "name": "Dahlia Hunt", - "reportsTo": 69, - "phone": "(720) 339-5202", - "extension": 3690, - "hireDate": new Date(2011, 3, 26), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 4 - }, { - "id": 94, - "name": "Adria Stanley", - "reportsTo": 69, - "phone": "(536) 357-6391", - "extension": 3374, - "hireDate": new Date(2014, 7, 26), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }] - }] - }] - }, { - "id": 3, - "name": "Priscilla Frank", - "reportsTo": 1, - "phone": "(278) 927-2684", - "extension": 4183, - "hireDate": new Date(2014, 11, 30), - "fullTime": true, - "position": "Chief Product Officer", - "timeInPosition": 2, - "employees": [{ - "id": 4, - "name": "Ursula Holmes", - "reportsTo": 3, - "phone": "(302) 760-2034", - "extension": 2226, - "hireDate": new Date(2011, 6, 6), - "fullTime": true, - "position": "EVP, Product Strategy", - "timeInPosition": 4 - }, { - "id": 24, - "name": "Melvin Carrillo", - "reportsTo": 3, - "phone": "(348) 933-5167", - "extension": 2482, - "hireDate": new Date(2014, 7, 21), - "fullTime": true, - "position": "Director, Developer Relations", - "timeInPosition": 6, - "employees": [{ - "id": 29, - "name": "Martha Chavez", - "reportsTo": 24, - "phone": "(860) 754-3464", - "extension": 4531, - "hireDate": new Date(2013, 3, 12), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 30, - "name": "Oren Fox", - "reportsTo": 24, - "phone": "(572) 414-3299", - "extension": 4849, - "hireDate": new Date(2013, 5, 14), - "fullTime": false, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 41, - "name": "Amos Barr", - "reportsTo": 24, - "phone": "(470) 381-3718", - "extension": 7643, - "hireDate": new Date(2010, 3, 9), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 2 - }] - }] - }, { - "id": 5, - "name": "Anika Vega", - "reportsTo": 1, - "phone": "(910) 714-1802", - "extension": 6353, - "hireDate": new Date(2010, 2, 25), - "fullTime": true, - "position": "Chief Process Officer", - "timeInPosition": 5, - "employees": [{ - "id": 10, - "name": "Vernon Ballard", - "reportsTo": 5, - "phone": "(702) 185-8890", - "extension": 9242, - "hireDate": new Date(2015, 6, 26), - "fullTime": true, - "position": "Director Facilities", - "timeInPosition": 2, - "employees": [{ - "id": 16, - "name": "Ali Guy", - "reportsTo": 10, - "phone": "(429) 912-6578", - "extension": 2225, - "hireDate": new Date(2014, 6, 29), - "fullTime": true, - "position": "Operations Manager", - "timeInPosition": 4, - "employees": [{ - "id": 23, - "name": "Bruce Reilly", - "reportsTo": 16, - "phone": "(995) 243-7302", - "extension": 4815, - "hireDate": new Date(2015, 4, 1), - "fullTime": true, - "position": "Head of Security", - "timeInPosition": 1, - "employees": [{ - "id": 26, - "name": "Rowan Morin", - "reportsTo": 23, - "phone": "(792) 141-4374", - "extension": 1844, - "hireDate": new Date(2015, 7, 30), - "fullTime": true, - "position": "Building Security", - "timeInPosition": 5 - }, { - "id": 44, - "name": "Benedict Soto", - "reportsTo": 23, - "phone": "(822) 282-5991", - "extension": 6422, - "hireDate": new Date(2012, 6, 1), - "fullTime": false, - "position": "Building Security", - "timeInPosition": 4 - }] - }, { - "id": 48, - "name": "Maryam Rios", - "reportsTo": 16, - "phone": "(673) 764-6720", - "extension": 531, - "hireDate": new Date(2014, 3, 3), - "fullTime": true, - "position": "Team Lead, Personal Assistants", - "timeInPosition": 1, - "employees": [{ - "id": 58, - "name": "Rose Mcintyre", - "reportsTo": 48, - "phone": "(771) 615-4590", - "extension": 7094, - "hireDate": new Date(2015, 6, 30), - "fullTime": false, - "position": "Personal Assistant", - "timeInPosition": 6 - }] - }] - }] - }] - }, { - "id": 7, - "name": "Nevada Hart", - "reportsTo": 1, - "phone": "(254) 220-1576", - "extension": 6649, - "hireDate": new Date(2015, 8, 17), - "fullTime": true, - "position": "Chief Financial Officer", - "timeInPosition": 6, - "employees": [{ - "id": 14, - "name": "Zena Sanford", - "reportsTo": 7, - "phone": "(437) 568-8160", - "extension": 4452, - "hireDate": new Date(2010, 11, 30), - "fullTime": true, - "position": "VP, Finance", - "timeInPosition": 4 - }, { - "id": 15, - "name": "Quinlan Howe", - "reportsTo": 7, - "phone": "(464) 334-9748", - "extension": 8722, - "hireDate": new Date(2011, 6, 9), - "fullTime": false, - "position": "Senior Director, Finance", - "timeInPosition": 0, - "employees": [{ - "id": 17, - "name": "Indira Lopez", - "reportsTo": 15, - "phone": "(301) 368-0938", - "extension": 8027, - "hireDate": new Date(2013, 8, 18), - "fullTime": true, - "position": "ERP Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 18, - "name": "Lareina Lara", - "reportsTo": 17, - "phone": "(233) 457-7482", - "extension": 1996, - "hireDate": new Date(2010, 4, 30), - "fullTime": true, - "position": "ERP Solutions Consultant", - "timeInPosition": 6 - }, { - "id": 19, - "name": "Maxwell Wise", - "reportsTo": 17, - "phone": "(570) 494-2531", - "extension": 9865, - "hireDate": new Date(2012, 5, 19), - "fullTime": true, - "position": "Systems Engineer", - "timeInPosition": 0 - }] - }, { - "id": 20, - "name": "Hunter Mcbride", - "reportsTo": 15, - "phone": "(409) 442-7016", - "extension": 4284, - "hireDate": new Date(2012, 10, 20), - "fullTime": true, - "position": "Senior Director, Tax", - "timeInPosition": 3 - }, { - "id": 21, - "name": "Jana Serrano", - "reportsTo": 15, - "phone": "(910) 718-4620", - "extension": 6970, - "hireDate": new Date(2010, 4, 2), - "fullTime": true, - "position": "Financial Planning & Analysis Manager", - "timeInPosition": 2 - }, { - "id": 22, - "name": "Zachery Shelton", - "reportsTo": 15, - "phone": "(310) 240-8675", - "extension": 4527, - "hireDate": new Date(2011, 11, 23), - "fullTime": false, - "position": "Corporate Finance Controller", - "timeInPosition": 6, - "employees": [{ - "id": 28, - "name": "Cullen Freeman", - "reportsTo": 22, - "phone": "(136) 554-8814", - "extension": 9861, - "hireDate": new Date(2014, 3, 15), - "fullTime": true, - "position": "Treasurer Accountant", - "timeInPosition": 2 - }, { - "id": 31, - "name": "Quinn Dean", - "reportsTo": 22, - "phone": "(152) 613-3507", - "extension": 6621, - "hireDate": new Date(2015, 1, 29), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 6 - }, { - "id": 34, - "name": "Samantha Brady", - "reportsTo": 22, - "phone": "(206) 398-4328", - "extension": 1157, - "hireDate": new Date(2011, 2, 13), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 2, - "employees": [{ - "id": 35, - "name": "Tamara Green", - "reportsTo": 34, - "phone": "(219) 248-2789", - "extension": 4880, - "hireDate": new Date(2014, 2, 4), - "fullTime": true, - "position": "Junior Accountant", - "timeInPosition": 6 - }] - }, { - "id": 36, - "name": "Olympia Coleman", - "reportsTo": 22, - "phone": "(944) 853-6383", - "extension": 2136, - "hireDate": new Date(2013, 7, 31), - "fullTime": true, - "position": "Collections Manager", - "timeInPosition": 3 - }, { - "id": 37, - "name": "Breanna Goodwin", - "reportsTo": 22, - "phone": "(379) 988-9630", - "extension": 5898, - "hireDate": new Date(2010, 5, 23), - "fullTime": false, - "position": "Payroll Specialist", - "timeInPosition": 4 - }] - }, { - "id": 27, - "name": "Curran Travis", - "reportsTo": 15, - "phone": "(438) 135-8033", - "extension": 3841, - "hireDate": new Date(2011, 6, 13), - "fullTime": true, - "position": "Finance Controller", - "timeInPosition": 5 - }] - }] - }, { - "id": 8, - "name": "Hunter Fry", - "reportsTo": 1, - "phone": "(766) 358-9858", - "extension": 3741, - "hireDate": new Date(2011, 2, 12), - "fullTime": false, - "position": "General Counsel", - "timeInPosition": 3, - "employees": [{ - "id": 9, - "name": "Kuame Carrillo", - "reportsTo": 8, - "phone": "(192) 383-1305", - "extension": 9228, - "hireDate": new Date(2011, 2, 22), - "fullTime": true, - "position": "Associate General Councel", - "timeInPosition": 0 - }, { - "id": 13, - "name": "Stacy Todd", - "reportsTo": 8, - "phone": "(925) 286-3327", - "extension": 8565, - "hireDate": new Date(2014, 7, 5), - "fullTime": true, - "position": "Councel", - "timeInPosition": 0 - }, { - "id": 33, - "name": "Valentine Wyatt", - "reportsTo": 8, - "phone": "(165) 166-6205", - "extension": 3588, - "hireDate": new Date(2015, 5, 21), - "fullTime": true, - "position": "Councel", - "timeInPosition": 5 - }, { - "id": 86, - "name": "Daniel Mccarthy", - "reportsTo": 8, - "phone": "(624) 483-6206", - "extension": 9112, - "hireDate": new Date(2013, 12, 3), - "fullTime": false, - "position": "Staff Attorney", - "timeInPosition": 0 - }] - }] - }]; - export default employees; \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/different-row-color-per-level/main.jsx b/docs/knowledge-base/examples/treelist/different-row-color-per-level/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/different-row-color-per-level/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/drag-and-drop/app.jsx b/docs/knowledge-base/examples/treelist/drag-and-drop/app.jsx deleted file mode 100644 index 2c39b901..00000000 --- a/docs/knowledge-base/examples/treelist/drag-and-drop/app.jsx +++ /dev/null @@ -1,148 +0,0 @@ -import * as React from 'react'; -import { - TreeList, getItemPath -} from '@progress/kendo-react-treelist'; - -const removeItem = (tree, itemLevel) => { - const itemPath = getItemPath(tree, itemLevel, subItemsField); - const item = itemPath.pop(); - const parent = itemPath.pop(); - const itemIndex = itemLevel[itemLevel.length - 1]; - (parent ? parent[subItemsField] : tree).splice(itemIndex, 1); - - return item; -}; - -const insertItem = (tree, insertLevel, item) => { - const destinationItemPath = getItemPath(tree, insertLevel, subItemsField); - const destinationItem = destinationItemPath.pop(); - const destinationParent = destinationItemPath.pop(); - if (destinationParent) { - const insertAt = destinationParent[subItemsField].indexOf(destinationItem) + 1; - const destItems = destinationParent[subItemsField].slice(); - destItems.splice(insertAt, 0, item); - destinationParent[subItemsField] = destItems; - } else { - tree.splice(insertLevel[0] + 1, 0, item); - } -}; - -const subItemsField = 'subItems'; -const expandField = 'expanded'; -const columns = [ - { field: 'name', title: 'Name', width: 250, expandable: true } -]; - -const tree1 = [ - { name: 'data 1', [expandField]: true, [subItemsField]: [{ name: 'data 1.1', [expandField]: true, [subItemsField]: [{ name: 'data 1.2' }] }] } -]; - -const tree2 = [ - { name: 'data 2', [expandField]: true, [subItemsField]: [{ name: 'data 2.1', [expandField]: true, [subItemsField]: [{ name: 'data 2.2' }] }] } -]; - -const RowRender = (properties) => { - const { row, props, onDrop, onDragStart } = properties; - const additionalProps = { - onDragStart: (e) => onDragStart(e, props), - onDragOver: (e) => { e.preventDefault(); }, - onDrop: (e) => onDrop(e, props), - draggable: true - }; - return React.cloneElement(row, { ...row.props, ...additionalProps }, row.props.children) -} - -class App extends React.Component { - state = { - data1: tree1, - data2: tree2, - dragFrom: '', - dragged: null - }; - - handleOnDropFirst = (_e, props) => { - if (this.state.dragFrom === 'second') { - const { dragged, data1, data2 } = this.state; - const { dataItem, level } = dragged; - const newData1 = [...data1]; - const newData2 = [...data2]; - removeItem(newData2, level); - insertItem(newData1, props.level, dataItem); - - this.setState({ - data1: newData1, - data2: newData2 - }); - } - } - handleDragStartFirst = (_e, props) => { - const { dataItem, level } = props; - this.setState({ - dragFrom: "first", - dragged: { dataItem, level } - }); - } - - handleOnDropSecond = (_e, props) => { - if (this.state.dragFrom === 'first') { - const { dragged, data1, data2 } = this.state; - const { dataItem, level } = dragged; - const newData1 = [...data1]; - const newData2 = [...data2]; - removeItem(newData1, level); - insertItem(newData2, props.level, dataItem); - - this.setState({ - data1: newData1, - data2: newData2 - }); - } - } - - handleDragStartSecond = (_e, props) => { - const { dataItem, level } = props; - this.setState({ - dragFrom: "second", - dragged: { dataItem, level } - }); - } - - rowForTreeList1 = (row, props) => { - return - } - - rowForTreeList2 = (row, props) => { - return - } - - render() { - return ( - <> - - -

    -


    -

    - - - - ); - } -} - -export default App; - diff --git a/docs/knowledge-base/examples/treelist/drag-and-drop/main.jsx b/docs/knowledge-base/examples/treelist/drag-and-drop/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/drag-and-drop/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/drag-drop-to-element/app.jsx b/docs/knowledge-base/examples/treelist/drag-drop-to-element/app.jsx deleted file mode 100644 index a4c363fb..00000000 --- a/docs/knowledge-base/examples/treelist/drag-drop-to-element/app.jsx +++ /dev/null @@ -1,74 +0,0 @@ -import * as React from 'react'; -import { Grid, GridColumn } from '@progress/kendo-react-grid'; -import { TreeList } from '@progress/kendo-react-treelist'; -import gridData from './data.js'; -const columns = [ - { - field: 'taskID', - title: 'taskID', - width: '250px', - expandable: true, - }, - { - field: 'title', - title: 'Title', - }, -]; -const App = () => { - const div1Ref = React.createRef(); - const [DropedItem, setDropedItem] = React.useState([]); - const [dragItem, setDragItem] = React.useState(''); - - React.useEffect(() => { - let divEl = div1Ref.current; - const preventDragover = (event) => { - event.preventDefault(); - }; - - const handleDropItem = (event) => { - setDropedItem(dragItem); - }; - - divEl.addEventListener('drop', handleDropItem); - divEl.addEventListener('dragover', preventDragover); - - return () => { - divEl.removeEventListener('drop', handleDropItem); - divEl.removeEventListener('dragover', preventDragover); - }; - }, [dragItem]); - - const GridRowRender = (tr, props) => { - const trProps = { - draggable: true, - onDragStart: (e) => { - setDragItem(props.dataItem); - }, - }; - return React.cloneElement(tr, { ...trProps }, tr.props.children); - }; - return ( - <> -

    - {DropedItem.title} -
    -
    - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treelist/drag-drop-to-element/data.js b/docs/knowledge-base/examples/treelist/drag-drop-to-element/data.js deleted file mode 100644 index 46c8abca..00000000 --- a/docs/knowledge-base/examples/treelist/drag-drop-to-element/data.js +++ /dev/null @@ -1,29 +0,0 @@ -const data = [ - { - taskID: 1, - ownerId: 1, - title: "Fast and furious 6" - }, - { - taskID: 2, - ownerId: 3, - title: "The Internship" - }, - { - taskID: 3, - ownerId: 2, - title: "The Perks of Being a Wallflower" - }, - { - taskID: 4, - ownerId: 1, - title: "The Help" - }, - { - taskID: 5, - ownerId: 2, - title: "Now You See Me" - } -]; - -export default data; diff --git a/docs/knowledge-base/examples/treelist/drag-drop-to-element/main.jsx b/docs/knowledge-base/examples/treelist/drag-drop-to-element/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/drag-drop-to-element/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/pager-at-bottom/app.jsx b/docs/knowledge-base/examples/treelist/pager-at-bottom/app.jsx deleted file mode 100644 index a02ab747..00000000 --- a/docs/knowledge-base/examples/treelist/pager-at-bottom/app.jsx +++ /dev/null @@ -1,90 +0,0 @@ -import * as React from "react"; -import { - TreeList, - mapTreeItem, - extendDataItem -} from "@progress/kendo-react-treelist"; - -import { TreeListPager } from "./pager.jsx"; - -import { generateData } from "./shared-treelist-data"; - -const numberOfColumns = 4; -const columnWidth = 200; -const numberOfRows = 5000; -const subItemsField = "subItems"; -const expandField = "expanded"; - -const { columns, data } = generateData( - numberOfColumns, - columnWidth, - numberOfRows, - subItemsField -); - -class App extends React.Component { - state = { - data: [...data], - expanded: [], - skip: 0, - take: 20 - }; - - onExpandChange = event => { - const expanded = !event.value; - const tree = [...this.state.data]; - - mapTreeItem(tree, event.level, subItemsField, item => - extendDataItem(item, subItemsField, { [expandField]: expanded }) - ); - - this.setState({ - data: tree, - expanded: event.value - ? this.state.expanded.filter(id => id !== event.dataItem.id) - : [...this.state.expanded, event.dataItem.id] - }); - }; - - onPageChange = event => { - const { skip, take } = event; - this.setState({ skip, take }); - }; - - getTotal = () => { - let total = numberOfRows; - this.state.data.map(i => { - if (i.expanded == true) { - total = total + i.subItems.length; - } - }); - return total; - }; - - render() { - return ( - <> - - - - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/treelist/pager-at-bottom/main.jsx b/docs/knowledge-base/examples/treelist/pager-at-bottom/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/pager-at-bottom/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/pager-at-bottom/pager.jsx b/docs/knowledge-base/examples/treelist/pager-at-bottom/pager.jsx deleted file mode 100644 index 7ca81e7d..00000000 --- a/docs/knowledge-base/examples/treelist/pager-at-bottom/pager.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from "react"; -import { Pager } from "@progress/kendo-react-data-tools"; - -export const TreeListPager = function(props) { - return ( - - ); -}; diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-editor/MyCustomTreeListTextEditor.jsx b/docs/knowledge-base/examples/treelist/treelist-custom-editor/MyCustomTreeListTextEditor.jsx deleted file mode 100644 index 91cacc2f..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-editor/MyCustomTreeListTextEditor.jsx +++ /dev/null @@ -1,63 +0,0 @@ -import * as React from 'react'; -import { useTableKeyboardNavigation } from '@progress/kendo-react-data-tools'; - -import { classNames } from '@progress/kendo-react-common'; -const TREELIST_COL_INDEX_ATTRIBUTE = 'data-grid-col-index'; - -function getNestedValue(fieldName, dataItem) { - const path = (fieldName || '').split('.'); - let data = dataItem; - path.forEach((p) => { - data = data ? data[p] : undefined; - }); - - return data; -} -export const MyCustomTreeListTextEditor = (props) => { - console.log(props); - const onChange = React.useCallback( - (event) => { - if (props.onChange) { - props.onChange({ - dataItem: props.dataItem, - level: props.level, - field: props.field, - syntheticEvent: event, - value: event.target.value, - }); - } - }, - [props.onChange, props.dataItem, props.level, props.field] - ); - const navigationAttributes = useTableKeyboardNavigation(props.id); - const editCellClasses = classNames( - { - ['k-state-selected']: props.isSelected, - }, - props.className - ); - - const defaultRendering = ( - - - - ); - - return props.render - ? props.render.call(undefined, defaultRendering, props) - : defaultRendering; -}; diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-editor/app.jsx b/docs/knowledge-base/examples/treelist/treelist-custom-editor/app.jsx deleted file mode 100644 index c5de1144..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-editor/app.jsx +++ /dev/null @@ -1,198 +0,0 @@ -import * as React from 'react'; -import { - TreeList, - TreeListToolbar, - mapTree, - extendDataItem, - removeItems, - modifySubItems, - TreeListTextEditor, - TreeListBooleanEditor, -} from '@progress/kendo-react-treelist'; -import MyCommandCell from './my-command-cell'; -import employees from './data'; -import { MyCustomTreeListTextEditor } from './MyCustomTreeListTextEditor'; -const subItemsField = 'employees'; -const expandField = 'expanded'; -const editField = 'inEdit'; -const App = () => { - const [state, setState] = React.useState({ - data: employees.slice(), - expanded: [1, 2, 32], - inEdit: [], - }); - - const addChild = (dataItem) => { - const newRecord = createNewItem(); - setState({ - ...state, - inEdit: [...state.inEdit, newRecord], - expanded: [...state.expanded, dataItem.id], - data: modifySubItems( - state.data, - subItemsField, - (item) => item.id === dataItem.id, - (subItems) => [newRecord, ...subItems] - ), - }); - }; - - const enterEdit = (dataItem) => { - setState({ - ...state, - inEdit: [...state.inEdit, extendDataItem(dataItem, subItemsField)], - }); - }; - - const save = (dataItem) => { - const { isNew, inEdit, ...itemToSave } = dataItem; - setState({ - ...state, - data: mapTree(state.data, subItemsField, (item) => - item.id === itemToSave.id ? itemToSave : item - ), - inEdit: state.inEdit.filter((i) => i.id !== itemToSave.id), - }); - }; - - const cancel = (editedItem) => { - const { inEdit, data } = state; - - if (editedItem.isNew) { - return remove(editedItem); - } - - setState({ - ...state, - data: mapTree(data, subItemsField, (item) => - item.id === editedItem.id ? inEdit.find((i) => i.id === item.id) : item - ), - inEdit: inEdit.filter((i) => i.id !== editedItem.id), - }); - }; - - const remove = (dataItem) => { - setState({ - ...state, - data: removeItems(state.data, subItemsField, (i) => i.id === dataItem.id), - inEdit: state.inEdit.filter((i) => i.id !== dataItem.id), - }); - }; - - const onExpandChange = (e) => { - setState({ - ...state, - expanded: e.value - ? state.expanded.filter((id) => id !== e.dataItem.id) - : [...state.expanded, e.dataItem.id], - }); - }; - - const onItemChange = (event) => { - const field = event.field; - setState({ - ...state, - data: mapTree(state.data, subItemsField, (item) => - item.id === event.dataItem.id - ? extendDataItem(item, subItemsField, { - [field]: event.value, - }) - : item - ), - }); - }; - - const addRecord = () => { - const newRecord = createNewItem(); - setState({ - ...state, - data: [newRecord, ...state.data], - inEdit: [...state.inEdit, { ...newRecord }], - }); - }; - - const createNewItem = () => { - const timestamp = new Date().getTime(); - return { - id: timestamp, - isNew: true, - }; - }; - - const CommandCell = MyCommandCell( - enterEdit, - remove, - save, - cancel, - addChild, - editField - ); - - const columns = [ - { - field: 'name', - title: 'Name', - width: '280px', - editCell: React.useCallback( - (props) => , - [] - ), - expandable: true, - }, - { - field: 'position', - title: 'Position', - width: '260px', - format: '8', - editCell: React.useCallback( - (props) => , - [] - ), - }, - { - field: 'fullTime', - title: 'Full Time', - width: '160px', - editCell: TreeListBooleanEditor, - }, - { - cell: CommandCell, - width: '360px', - }, - ]; - - const { data, expanded, inEdit } = state; - return ( - - extendDataItem(item, subItemsField, { - [expandField]: expanded.includes(item.id), - [editField]: Boolean(inEdit.find((i) => i.id === item.id)), - }) - )} - editField={editField} - expandField={expandField} - subItemsField={subItemsField} - onItemChange={onItemChange} - onExpandChange={onExpandChange} - columns={columns} - toolbar={ - - - - } - /> - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-editor/data.js b/docs/knowledge-base/examples/treelist/treelist-custom-editor/data.js deleted file mode 100644 index ab659696..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-editor/data.js +++ /dev/null @@ -1,1020 +0,0 @@ -const employees = [{ - "id": 1, - "name": "Daryl Sweeney", - "reportsTo": null, - "phone": "(555) 924-9726", - "extension": 8253, - "hireDate": new Date(2012, 2, 7), - "fullTime": true, - "position": "CEO", - "timeInPosition": 2, - "employees": [{ - "id": 2, - "name": "Guy Wooten", - "reportsTo": 1, - "phone": "(438) 738-4935", - "extension": 1155, - "hireDate": new Date(2010, 3, 3), - "fullTime": true, - "position": "Chief Technical Officer", - "timeInPosition": 1, - "employees": [{ - "id": 32, - "name": "Buffy Weber", - "reportsTo": 2, - "phone": "(699) 838-6121", - "extension": 8933, - "hireDate": new Date(2011, 7, 11), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 11, - "name": "Hyacinth Hood", - "reportsTo": 32, - "phone": "(889) 345-2438", - "extension": 8564, - "hireDate": new Date(2014, 2, 3), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 60, - "name": "Akeem Carr", - "reportsTo": 11, - "phone": "(738) 136-2814", - "extension": 9353, - "hireDate": new Date(2011, 4, 21), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 78, - "name": "Rinah Simon", - "reportsTo": 11, - "phone": "(285) 912-5271", - "extension": 7795, - "hireDate": new Date(2012, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }] - }, { - "id": 42, - "name": "Gage Daniels", - "reportsTo": 32, - "phone": "(107) 290-6260", - "extension": 896, - "hireDate": new Date(2013, 5, 16), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 5 - }, { - "id": 43, - "name": "Constance Vazquez", - "reportsTo": 32, - "phone": "(800) 301-1978", - "extension": 5141, - "hireDate": new Date(2011, 6, 7), - "fullTime": true, - "position": "Director, Engineering", - "timeInPosition": 1, - "employees": [{ - "id": 46, - "name": "Darrel Solis", - "reportsTo": 43, - "phone": "(327) 977-0216", - "extension": 7779, - "hireDate": new Date(2015, 4, 25), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 47, - "name": "Brian Yang", - "reportsTo": 46, - "phone": "(565) 146-5435", - "extension": 3885, - "hireDate": new Date(2012, 9, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 50, - "name": "Lillian Bradshaw", - "reportsTo": 46, - "phone": "(323) 509-3479", - "extension": 5426, - "hireDate": new Date(2014, 5, 10), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 2 - }, { - "id": 51, - "name": "Christian Palmer", - "reportsTo": 46, - "phone": "(490) 421-8718", - "extension": 3706, - "hireDate": new Date(2012, 12, 27), - "fullTime": false, - "position": "Technical Lead", - "timeInPosition": 1 - }, { - "id": 55, - "name": "Summer Mosley", - "reportsTo": 46, - "phone": "(784) 962-2301", - "extension": 5492, - "hireDate": new Date(2010, 3, 2), - "fullTime": true, - "position": "QA Engineer", - "timeInPosition": 5 - }, { - "id": 56, - "name": "Barry Ayers", - "reportsTo": 46, - "phone": "(452) 373-9227", - "extension": 1308, - "hireDate": new Date(2011, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 59, - "name": "Keiko Espinoza", - "reportsTo": 46, - "phone": "(226) 600-5305", - "extension": 9363, - "hireDate": new Date(2011, 9, 18), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 4 - }, { - "id": 61, - "name": "Candace Pickett", - "reportsTo": 46, - "phone": "(120) 117-7475", - "extension": 5178, - "hireDate": new Date(2010, 5, 6), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }] - }, { - "id": 63, - "name": "Mia Caldwell", - "reportsTo": 43, - "phone": "(848) 636-6470", - "extension": 6368, - "hireDate": new Date(2012, 10, 7), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 65, - "name": "Thomas Terry", - "reportsTo": 63, - "phone": "(764) 831-4248", - "extension": 3574, - "hireDate": new Date(2015, 6, 15), - "fullTime": false, - "position": "Senior Enterprise Support Officer", - "timeInPosition": 2 - }, { - "id": 67, - "name": "Ruth Downs", - "reportsTo": 63, - "phone": "(138) 991-1440", - "extension": 8067, - "hireDate": new Date(2013, 7, 13), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 70, - "name": "Yasir Wilder", - "reportsTo": 63, - "phone": "(759) 701-8665", - "extension": 8350, - "hireDate": new Date(2010, 11, 8), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 3 - }, { - "id": 71, - "name": "Flavia Short", - "reportsTo": 63, - "phone": "(370) 133-9238", - "extension": 6390, - "hireDate": new Date(2013, 2, 21), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }, { - "id": 74, - "name": "Aaron Roach", - "reportsTo": 63, - "phone": "(958) 717-9230", - "extension": 4899, - "hireDate": new Date(2011, 7, 30), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 75, - "name": "Eric Russell", - "reportsTo": 63, - "phone": "(516) 575-8505", - "extension": 2224, - "hireDate": new Date(2012, 10, 28), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 76, - "name": "Cheyenne Olson", - "reportsTo": 63, - "phone": "(241) 645-0257", - "extension": 9181, - "hireDate": new Date(2015, 5, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 77, - "name": "Shaine Avila", - "reportsTo": 63, - "phone": "(844) 435-1360", - "extension": 3374, - "hireDate": new Date(2010, 1, 31), - "fullTime": true, - "position": "UI Designer", - "timeInPosition": 5 - }, { - "id": 81, - "name": "Chantale Long", - "reportsTo": 63, - "phone": "(252) 419-6891", - "extension": 7868, - "hireDate": new Date(2010, 6, 17), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 1 - }, { - "id": 83, - "name": "Dane Cruz", - "reportsTo": 63, - "phone": "(946) 701-6165", - "extension": 3828, - "hireDate": new Date(2014, 10, 8), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 84, - "name": "Regan Patterson", - "reportsTo": 63, - "phone": "(265) 946-1765", - "extension": 6955, - "hireDate": new Date(2012, 3, 1), - "fullTime": true, - "position": "Technical Writer", - "timeInPosition": 6 - }, { - "id": 85, - "name": "Drew Mckay", - "reportsTo": 63, - "phone": "(327) 293-0162", - "extension": 6904, - "hireDate": new Date(2011, 3, 25), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 88, - "name": "Bevis Miller", - "reportsTo": 63, - "phone": "(525) 557-0169", - "extension": 6978, - "hireDate": new Date(2011, 4, 19), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 89, - "name": "Bruce Mccarty", - "reportsTo": 63, - "phone": "(936) 777-8730", - "extension": 6552, - "hireDate": new Date(2014, 3, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 5 - }] - }, { - "id": 90, - "name": "Ocean Blair", - "reportsTo": 43, - "phone": "(343) 586-6614", - "extension": 1424, - "hireDate": new Date(2011, 4, 27), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 2, - "employees": [{ - "id": 91, - "name": "Guinevere Osborn", - "reportsTo": 90, - "phone": "(424) 741-0006", - "extension": 3166, - "hireDate": new Date(2014, 11, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 92, - "name": "Olga Strong", - "reportsTo": 90, - "phone": "(949) 417-1168", - "extension": 4568, - "hireDate": new Date(2015, 5, 28), - "fullTime": true, - "position": "Graphic Designer", - "timeInPosition": 4 - }, { - "id": 93, - "name": "Robert Orr", - "reportsTo": 90, - "phone": "(977) 341-3721", - "extension": 9241, - "hireDate": new Date(2012, 8, 20), - "fullTime": false, - "position": "Support Officer", - "timeInPosition": 6 - }, { - "id": 95, - "name": "Odette Sears", - "reportsTo": 90, - "phone": "(264) 818-6576", - "extension": 1914, - "hireDate": new Date(2013, 7, 5), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 45, - "name": "Zelda Medina", - "reportsTo": 32, - "phone": "(563) 359-6023", - "extension": 2600, - "hireDate": new Date(2012, 11, 6), - "fullTime": true, - "position": "QA Architect", - "timeInPosition": 2 - }] - }, { - "id": 52, - "name": "Skyler Cleveland", - "reportsTo": 2, - "phone": "(217) 280-5300", - "extension": 9655, - "hireDate": new Date(2014, 11, 10), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 40, - "name": "Karleigh Garza", - "reportsTo": 52, - "phone": "(370) 983-8796", - "extension": 4044, - "hireDate": new Date(2014, 3, 10), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 49, - "name": "Elmo Tyson", - "reportsTo": 40, - "phone": "(344) 496-9555", - "extension": 6950, - "hireDate": new Date(2014, 9, 18), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 72, - "name": "Stacey Lynn", - "reportsTo": 40, - "phone": "(140) 772-7509", - "extension": 8396, - "hireDate": new Date(2014, 7, 31), - "fullTime": false, - "position": "QA Engineer", - "timeInPosition": 1, - "employees": [{ - "id": 80, - "name": "Meredith Parrish", - "reportsTo": 72, - "phone": "(714) 284-2408", - "extension": 7675, - "hireDate": new Date(2012, 11, 13), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 6 - }] - }, { - "id": 96, - "name": "Cassady Whitley", - "reportsTo": 40, - "phone": "(996) 587-8405", - "extension": 780, - "hireDate": new Date(2013, 5, 7), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 97, - "name": "Haviva Campbell", - "reportsTo": 40, - "phone": "(263) 887-4689", - "extension": 2808, - "hireDate": new Date(2013, 3, 5), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 2 - }, { - "id": 98, - "name": "Cameron Ayers", - "reportsTo": 40, - "phone": "(470) 709-8030", - "extension": 2893, - "hireDate": new Date(2013, 8, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 3 - }, { - "id": 99, - "name": "Martha Sargent", - "reportsTo": 40, - "phone": "(587) 812-4418", - "extension": 5099, - "hireDate": new Date(2014, 2, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 100, - "name": "Darrel Kinney", - "reportsTo": 40, - "phone": "(888) 483-9606", - "extension": 4779, - "hireDate": new Date(2014, 3, 24), - "fullTime": false, - "position": "Graphic Designer", - "timeInPosition": 1 - }] - }, { - "id": 54, - "name": "Kuame Frye", - "reportsTo": 52, - "phone": "(360) 721-5886", - "extension": 2730, - "hireDate": new Date(2010, 11, 17), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 1, - "employees": [{ - "id": 64, - "name": "Ori Wynn", - "reportsTo": 54, - "phone": "(366) 342-0166", - "extension": 7252, - "hireDate": new Date(2015, 6, 21), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 0, - "employees": [{ - "id": 6, - "name": "Moses Duncan", - "reportsTo": 64, - "phone": "(421) 611-4814", - "extension": 669, - "hireDate": new Date(2010, 5, 24), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 12, - "name": "Jamalia Wallace", - "reportsTo": 64, - "phone": "(611) 391-8016", - "extension": 1952, - "hireDate": new Date(2011, 9, 8), - "fullTime": true, - "position": "Junior Designer", - "timeInPosition": 3 - }, { - "id": 62, - "name": "Palmer Gregory", - "reportsTo": 64, - "phone": "(360) 430-2505", - "extension": 4337, - "hireDate": new Date(2014, 8, 30), - "fullTime": true, - "position": "Designer", - "timeInPosition": 4 - }, { - "id": 68, - "name": "Mallory Gilliam", - "reportsTo": 64, - "phone": "(878) 423-2971", - "extension": 1341, - "hireDate": new Date(2014, 7, 24), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 1 - }, { - "id": 73, - "name": "Ima Hughes", - "reportsTo": 64, - "phone": "(905) 485-8001", - "extension": 1273, - "hireDate": new Date(2013, 6, 3), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }, { - "id": 79, - "name": "Duncan Mathews", - "reportsTo": 64, - "phone": "(790) 971-9709", - "extension": 4573, - "hireDate": new Date(2011, 8, 21), - "fullTime": false, - "position": "Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 69, - "name": "Sierra Beasley", - "reportsTo": 52, - "phone": "(271) 953-1968", - "extension": 3324, - "hireDate": new Date(2011, 4, 2), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 3, - "employees": [{ - "id": 38, - "name": "Elton Tucker", - "reportsTo": 69, - "phone": "(988) 930-9331", - "extension": 9216, - "hireDate": new Date(2015, 6, 4), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 1 - }, { - "id": 39, - "name": "Iona Brennan", - "reportsTo": 69, - "phone": "(356) 563-0600", - "extension": 5634, - "hireDate": new Date(2010, 9, 23), - "fullTime": true, - "position": "Junior Support Officer", - "timeInPosition": 4 - }, { - "id": 53, - "name": "Paul Campos", - "reportsTo": 69, - "phone": "(899) 205-1689", - "extension": 8586, - "hireDate": new Date(2011, 3, 17), - "fullTime": true, - "position": "Interaction Designer", - "timeInPosition": 4, - "employees": [{ - "id": 66, - "name": "Gloria Freeman", - "reportsTo": 53, - "phone": "(344) 950-9168", - "extension": 4738, - "hireDate": new Date(2013, 5, 6), - "fullTime": true, - "position": "Junior Interaction Designer", - "timeInPosition": 0 - }] - }, { - "id": 57, - "name": "Alyssa Hansen", - "reportsTo": 69, - "phone": "(548) 925-4799", - "extension": 4716, - "hireDate": new Date(2011, 1, 19), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 82, - "name": "Yael Walters", - "reportsTo": 69, - "phone": "(311) 489-8191", - "extension": 6520, - "hireDate": new Date(2013, 7, 4), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 87, - "name": "Dahlia Hunt", - "reportsTo": 69, - "phone": "(720) 339-5202", - "extension": 3690, - "hireDate": new Date(2011, 3, 26), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 4 - }, { - "id": 94, - "name": "Adria Stanley", - "reportsTo": 69, - "phone": "(536) 357-6391", - "extension": 3374, - "hireDate": new Date(2014, 7, 26), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }] - }] - }] - }, { - "id": 3, - "name": "Priscilla Frank", - "reportsTo": 1, - "phone": "(278) 927-2684", - "extension": 4183, - "hireDate": new Date(2014, 11, 30), - "fullTime": true, - "position": "Chief Product Officer", - "timeInPosition": 2, - "employees": [{ - "id": 4, - "name": "Ursula Holmes", - "reportsTo": 3, - "phone": "(302) 760-2034", - "extension": 2226, - "hireDate": new Date(2011, 6, 6), - "fullTime": true, - "position": "EVP, Product Strategy", - "timeInPosition": 4 - }, { - "id": 24, - "name": "Melvin Carrillo", - "reportsTo": 3, - "phone": "(348) 933-5167", - "extension": 2482, - "hireDate": new Date(2014, 7, 21), - "fullTime": true, - "position": "Director, Developer Relations", - "timeInPosition": 6, - "employees": [{ - "id": 29, - "name": "Martha Chavez", - "reportsTo": 24, - "phone": "(860) 754-3464", - "extension": 4531, - "hireDate": new Date(2013, 3, 12), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 30, - "name": "Oren Fox", - "reportsTo": 24, - "phone": "(572) 414-3299", - "extension": 4849, - "hireDate": new Date(2013, 5, 14), - "fullTime": false, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 41, - "name": "Amos Barr", - "reportsTo": 24, - "phone": "(470) 381-3718", - "extension": 7643, - "hireDate": new Date(2010, 3, 9), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 2 - }] - }] - }, { - "id": 5, - "name": "Anika Vega", - "reportsTo": 1, - "phone": "(910) 714-1802", - "extension": 6353, - "hireDate": new Date(2010, 2, 25), - "fullTime": true, - "position": "Chief Process Officer", - "timeInPosition": 5, - "employees": [{ - "id": 10, - "name": "Vernon Ballard", - "reportsTo": 5, - "phone": "(702) 185-8890", - "extension": 9242, - "hireDate": new Date(2015, 6, 26), - "fullTime": true, - "position": "Director Facilities", - "timeInPosition": 2, - "employees": [{ - "id": 16, - "name": "Ali Guy", - "reportsTo": 10, - "phone": "(429) 912-6578", - "extension": 2225, - "hireDate": new Date(2014, 6, 29), - "fullTime": true, - "position": "Operations Manager", - "timeInPosition": 4, - "employees": [{ - "id": 23, - "name": "Bruce Reilly", - "reportsTo": 16, - "phone": "(995) 243-7302", - "extension": 4815, - "hireDate": new Date(2015, 4, 1), - "fullTime": true, - "position": "Head of Security", - "timeInPosition": 1, - "employees": [{ - "id": 26, - "name": "Rowan Morin", - "reportsTo": 23, - "phone": "(792) 141-4374", - "extension": 1844, - "hireDate": new Date(2015, 7, 30), - "fullTime": true, - "position": "Building Security", - "timeInPosition": 5 - }, { - "id": 44, - "name": "Benedict Soto", - "reportsTo": 23, - "phone": "(822) 282-5991", - "extension": 6422, - "hireDate": new Date(2012, 6, 1), - "fullTime": false, - "position": "Building Security", - "timeInPosition": 4 - }] - }, { - "id": 48, - "name": "Maryam Rios", - "reportsTo": 16, - "phone": "(673) 764-6720", - "extension": 531, - "hireDate": new Date(2014, 3, 3), - "fullTime": true, - "position": "Team Lead, Personal Assistants", - "timeInPosition": 1, - "employees": [{ - "id": 58, - "name": "Rose Mcintyre", - "reportsTo": 48, - "phone": "(771) 615-4590", - "extension": 7094, - "hireDate": new Date(2015, 6, 30), - "fullTime": false, - "position": "Personal Assistant", - "timeInPosition": 6 - }] - }] - }] - }] - }, { - "id": 7, - "name": "Nevada Hart", - "reportsTo": 1, - "phone": "(254) 220-1576", - "extension": 6649, - "hireDate": new Date(2015, 8, 17), - "fullTime": true, - "position": "Chief Financial Officer", - "timeInPosition": 6, - "employees": [{ - "id": 14, - "name": "Zena Sanford", - "reportsTo": 7, - "phone": "(437) 568-8160", - "extension": 4452, - "hireDate": new Date(2010, 11, 30), - "fullTime": true, - "position": "VP, Finance", - "timeInPosition": 4 - }, { - "id": 15, - "name": "Quinlan Howe", - "reportsTo": 7, - "phone": "(464) 334-9748", - "extension": 8722, - "hireDate": new Date(2011, 6, 9), - "fullTime": false, - "position": "Senior Director, Finance", - "timeInPosition": 0, - "employees": [{ - "id": 17, - "name": "Indira Lopez", - "reportsTo": 15, - "phone": "(301) 368-0938", - "extension": 8027, - "hireDate": new Date(2013, 8, 18), - "fullTime": true, - "position": "ERP Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 18, - "name": "Lareina Lara", - "reportsTo": 17, - "phone": "(233) 457-7482", - "extension": 1996, - "hireDate": new Date(2010, 4, 30), - "fullTime": true, - "position": "ERP Solutions Consultant", - "timeInPosition": 6 - }, { - "id": 19, - "name": "Maxwell Wise", - "reportsTo": 17, - "phone": "(570) 494-2531", - "extension": 9865, - "hireDate": new Date(2012, 5, 19), - "fullTime": true, - "position": "Systems Engineer", - "timeInPosition": 0 - }] - }, { - "id": 20, - "name": "Hunter Mcbride", - "reportsTo": 15, - "phone": "(409) 442-7016", - "extension": 4284, - "hireDate": new Date(2012, 10, 20), - "fullTime": true, - "position": "Senior Director, Tax", - "timeInPosition": 3 - }, { - "id": 21, - "name": "Jana Serrano", - "reportsTo": 15, - "phone": "(910) 718-4620", - "extension": 6970, - "hireDate": new Date(2010, 4, 2), - "fullTime": true, - "position": "Financial Planning & Analysis Manager", - "timeInPosition": 2 - }, { - "id": 22, - "name": "Zachery Shelton", - "reportsTo": 15, - "phone": "(310) 240-8675", - "extension": 4527, - "hireDate": new Date(2011, 11, 23), - "fullTime": false, - "position": "Corporate Finance Controller", - "timeInPosition": 6, - "employees": [{ - "id": 28, - "name": "Cullen Freeman", - "reportsTo": 22, - "phone": "(136) 554-8814", - "extension": 9861, - "hireDate": new Date(2014, 3, 15), - "fullTime": true, - "position": "Treasurer Accountant", - "timeInPosition": 2 - }, { - "id": 31, - "name": "Quinn Dean", - "reportsTo": 22, - "phone": "(152) 613-3507", - "extension": 6621, - "hireDate": new Date(2015, 1, 29), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 6 - }, { - "id": 34, - "name": "Samantha Brady", - "reportsTo": 22, - "phone": "(206) 398-4328", - "extension": 1157, - "hireDate": new Date(2011, 2, 13), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 2, - "employees": [{ - "id": 35, - "name": "Tamara Green", - "reportsTo": 34, - "phone": "(219) 248-2789", - "extension": 4880, - "hireDate": new Date(2014, 2, 4), - "fullTime": true, - "position": "Junior Accountant", - "timeInPosition": 6 - }] - }, { - "id": 36, - "name": "Olympia Coleman", - "reportsTo": 22, - "phone": "(944) 853-6383", - "extension": 2136, - "hireDate": new Date(2013, 7, 31), - "fullTime": true, - "position": "Collections Manager", - "timeInPosition": 3 - }, { - "id": 37, - "name": "Breanna Goodwin", - "reportsTo": 22, - "phone": "(379) 988-9630", - "extension": 5898, - "hireDate": new Date(2010, 5, 23), - "fullTime": false, - "position": "Payroll Specialist", - "timeInPosition": 4 - }] - }, { - "id": 27, - "name": "Curran Travis", - "reportsTo": 15, - "phone": "(438) 135-8033", - "extension": 3841, - "hireDate": new Date(2011, 6, 13), - "fullTime": true, - "position": "Finance Controller", - "timeInPosition": 5 - }] - }] - }, { - "id": 8, - "name": "Hunter Fry", - "reportsTo": 1, - "phone": "(766) 358-9858", - "extension": 3741, - "hireDate": new Date(2011, 2, 12), - "fullTime": false, - "position": "General Counsel", - "timeInPosition": 3, - "employees": [{ - "id": 9, - "name": "Kuame Carrillo", - "reportsTo": 8, - "phone": "(192) 383-1305", - "extension": 9228, - "hireDate": new Date(2011, 2, 22), - "fullTime": true, - "position": "Associate General Councel", - "timeInPosition": 0 - }, { - "id": 13, - "name": "Stacy Todd", - "reportsTo": 8, - "phone": "(925) 286-3327", - "extension": 8565, - "hireDate": new Date(2014, 7, 5), - "fullTime": true, - "position": "Councel", - "timeInPosition": 0 - }, { - "id": 33, - "name": "Valentine Wyatt", - "reportsTo": 8, - "phone": "(165) 166-6205", - "extension": 3588, - "hireDate": new Date(2015, 5, 21), - "fullTime": true, - "position": "Councel", - "timeInPosition": 5 - }, { - "id": 86, - "name": "Daniel Mccarthy", - "reportsTo": 8, - "phone": "(624) 483-6206", - "extension": 9112, - "hireDate": new Date(2013, 12, 3), - "fullTime": false, - "position": "Staff Attorney", - "timeInPosition": 0 - }] - }] - }]; - export default employees; \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-editor/main.jsx b/docs/knowledge-base/examples/treelist/treelist-custom-editor/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-editor/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-editor/my-command-cell.jsx b/docs/knowledge-base/examples/treelist/treelist-custom-editor/my-command-cell.jsx deleted file mode 100644 index f31bbbe3..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-editor/my-command-cell.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from 'react'; -export default function MyCommandCell(enterEdit, remove, save, cancel, addChild, editField) { - // eslint-disable-next-line react/display-name - return class extends React.Component { - render() { - const { - dataItem - } = this.props; - return dataItem[editField] ? - - - : - - - - ; - } - - }; -} \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/app.jsx b/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/app.jsx deleted file mode 100644 index bfb07625..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/app.jsx +++ /dev/null @@ -1,111 +0,0 @@ -import * as React from 'react'; -import { - TreeList, - mapTree, - extendDataItem, -} from '@progress/kendo-react-treelist'; -import { getter } from '@progress/kendo-react-common'; -import { useTableKeyboardNavigation } from '@progress/kendo-react-data-tools'; -import employees from './data'; -const DATA_ITEM_KEY = 'id'; -const SUB_ITEMS_FIELD = 'employees'; -const EXPAND_FIELD = 'expanded'; -const idGetter = getter(DATA_ITEM_KEY); -const extendData = (dataState, selectedState, expandedState) => { - return mapTree(dataState, SUB_ITEMS_FIELD, (item) => - extendDataItem(item, SUB_ITEMS_FIELD, { - selected: selectedState[idGetter(item)], - expanded: expandedState[idGetter(item)], - }) - ); -}; - -const nameCell = (props) => { - const navigationAttributes = useTableKeyboardNavigation(props.id); - const onClick = (ev) => { - props.onExpandChange(ev, props.dataItem, props.level); - }; - let className = - props.dataItem[SUB_ITEMS_FIELD] && - props.dataItem[SUB_ITEMS_FIELD].length > 0 - ? props.expanded - ? 'k-icon k-i-caret-alt-down' - : 'k-icon k-i-caret-alt-right' - : 'k-icon'; - - return ( - - {[...Array(props.level.length - 1)].map((e, i) => ( - - ))} - - - {props.dataItem['name']} - - ); -}; -const App = () => { - const [dataState, setDataState] = React.useState(employees.slice()); - const [expandedState, setExpandedState] = React.useState({ - 1: true, - 2: true, - 32: true, - }); - const onExpandChange = React.useCallback( - (e) => { - setExpandedState({ - ...expandedState, - [idGetter(e.dataItem)]: !e.value, - }); - }, - [expandedState] - ); - return ( -
    - -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/data.js b/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/data.js deleted file mode 100644 index ab659696..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/data.js +++ /dev/null @@ -1,1020 +0,0 @@ -const employees = [{ - "id": 1, - "name": "Daryl Sweeney", - "reportsTo": null, - "phone": "(555) 924-9726", - "extension": 8253, - "hireDate": new Date(2012, 2, 7), - "fullTime": true, - "position": "CEO", - "timeInPosition": 2, - "employees": [{ - "id": 2, - "name": "Guy Wooten", - "reportsTo": 1, - "phone": "(438) 738-4935", - "extension": 1155, - "hireDate": new Date(2010, 3, 3), - "fullTime": true, - "position": "Chief Technical Officer", - "timeInPosition": 1, - "employees": [{ - "id": 32, - "name": "Buffy Weber", - "reportsTo": 2, - "phone": "(699) 838-6121", - "extension": 8933, - "hireDate": new Date(2011, 7, 11), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 11, - "name": "Hyacinth Hood", - "reportsTo": 32, - "phone": "(889) 345-2438", - "extension": 8564, - "hireDate": new Date(2014, 2, 3), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 60, - "name": "Akeem Carr", - "reportsTo": 11, - "phone": "(738) 136-2814", - "extension": 9353, - "hireDate": new Date(2011, 4, 21), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 78, - "name": "Rinah Simon", - "reportsTo": 11, - "phone": "(285) 912-5271", - "extension": 7795, - "hireDate": new Date(2012, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }] - }, { - "id": 42, - "name": "Gage Daniels", - "reportsTo": 32, - "phone": "(107) 290-6260", - "extension": 896, - "hireDate": new Date(2013, 5, 16), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 5 - }, { - "id": 43, - "name": "Constance Vazquez", - "reportsTo": 32, - "phone": "(800) 301-1978", - "extension": 5141, - "hireDate": new Date(2011, 6, 7), - "fullTime": true, - "position": "Director, Engineering", - "timeInPosition": 1, - "employees": [{ - "id": 46, - "name": "Darrel Solis", - "reportsTo": 43, - "phone": "(327) 977-0216", - "extension": 7779, - "hireDate": new Date(2015, 4, 25), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 47, - "name": "Brian Yang", - "reportsTo": 46, - "phone": "(565) 146-5435", - "extension": 3885, - "hireDate": new Date(2012, 9, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 50, - "name": "Lillian Bradshaw", - "reportsTo": 46, - "phone": "(323) 509-3479", - "extension": 5426, - "hireDate": new Date(2014, 5, 10), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 2 - }, { - "id": 51, - "name": "Christian Palmer", - "reportsTo": 46, - "phone": "(490) 421-8718", - "extension": 3706, - "hireDate": new Date(2012, 12, 27), - "fullTime": false, - "position": "Technical Lead", - "timeInPosition": 1 - }, { - "id": 55, - "name": "Summer Mosley", - "reportsTo": 46, - "phone": "(784) 962-2301", - "extension": 5492, - "hireDate": new Date(2010, 3, 2), - "fullTime": true, - "position": "QA Engineer", - "timeInPosition": 5 - }, { - "id": 56, - "name": "Barry Ayers", - "reportsTo": 46, - "phone": "(452) 373-9227", - "extension": 1308, - "hireDate": new Date(2011, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 59, - "name": "Keiko Espinoza", - "reportsTo": 46, - "phone": "(226) 600-5305", - "extension": 9363, - "hireDate": new Date(2011, 9, 18), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 4 - }, { - "id": 61, - "name": "Candace Pickett", - "reportsTo": 46, - "phone": "(120) 117-7475", - "extension": 5178, - "hireDate": new Date(2010, 5, 6), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }] - }, { - "id": 63, - "name": "Mia Caldwell", - "reportsTo": 43, - "phone": "(848) 636-6470", - "extension": 6368, - "hireDate": new Date(2012, 10, 7), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 65, - "name": "Thomas Terry", - "reportsTo": 63, - "phone": "(764) 831-4248", - "extension": 3574, - "hireDate": new Date(2015, 6, 15), - "fullTime": false, - "position": "Senior Enterprise Support Officer", - "timeInPosition": 2 - }, { - "id": 67, - "name": "Ruth Downs", - "reportsTo": 63, - "phone": "(138) 991-1440", - "extension": 8067, - "hireDate": new Date(2013, 7, 13), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 70, - "name": "Yasir Wilder", - "reportsTo": 63, - "phone": "(759) 701-8665", - "extension": 8350, - "hireDate": new Date(2010, 11, 8), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 3 - }, { - "id": 71, - "name": "Flavia Short", - "reportsTo": 63, - "phone": "(370) 133-9238", - "extension": 6390, - "hireDate": new Date(2013, 2, 21), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }, { - "id": 74, - "name": "Aaron Roach", - "reportsTo": 63, - "phone": "(958) 717-9230", - "extension": 4899, - "hireDate": new Date(2011, 7, 30), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 75, - "name": "Eric Russell", - "reportsTo": 63, - "phone": "(516) 575-8505", - "extension": 2224, - "hireDate": new Date(2012, 10, 28), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 76, - "name": "Cheyenne Olson", - "reportsTo": 63, - "phone": "(241) 645-0257", - "extension": 9181, - "hireDate": new Date(2015, 5, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 77, - "name": "Shaine Avila", - "reportsTo": 63, - "phone": "(844) 435-1360", - "extension": 3374, - "hireDate": new Date(2010, 1, 31), - "fullTime": true, - "position": "UI Designer", - "timeInPosition": 5 - }, { - "id": 81, - "name": "Chantale Long", - "reportsTo": 63, - "phone": "(252) 419-6891", - "extension": 7868, - "hireDate": new Date(2010, 6, 17), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 1 - }, { - "id": 83, - "name": "Dane Cruz", - "reportsTo": 63, - "phone": "(946) 701-6165", - "extension": 3828, - "hireDate": new Date(2014, 10, 8), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 84, - "name": "Regan Patterson", - "reportsTo": 63, - "phone": "(265) 946-1765", - "extension": 6955, - "hireDate": new Date(2012, 3, 1), - "fullTime": true, - "position": "Technical Writer", - "timeInPosition": 6 - }, { - "id": 85, - "name": "Drew Mckay", - "reportsTo": 63, - "phone": "(327) 293-0162", - "extension": 6904, - "hireDate": new Date(2011, 3, 25), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 88, - "name": "Bevis Miller", - "reportsTo": 63, - "phone": "(525) 557-0169", - "extension": 6978, - "hireDate": new Date(2011, 4, 19), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 89, - "name": "Bruce Mccarty", - "reportsTo": 63, - "phone": "(936) 777-8730", - "extension": 6552, - "hireDate": new Date(2014, 3, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 5 - }] - }, { - "id": 90, - "name": "Ocean Blair", - "reportsTo": 43, - "phone": "(343) 586-6614", - "extension": 1424, - "hireDate": new Date(2011, 4, 27), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 2, - "employees": [{ - "id": 91, - "name": "Guinevere Osborn", - "reportsTo": 90, - "phone": "(424) 741-0006", - "extension": 3166, - "hireDate": new Date(2014, 11, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 92, - "name": "Olga Strong", - "reportsTo": 90, - "phone": "(949) 417-1168", - "extension": 4568, - "hireDate": new Date(2015, 5, 28), - "fullTime": true, - "position": "Graphic Designer", - "timeInPosition": 4 - }, { - "id": 93, - "name": "Robert Orr", - "reportsTo": 90, - "phone": "(977) 341-3721", - "extension": 9241, - "hireDate": new Date(2012, 8, 20), - "fullTime": false, - "position": "Support Officer", - "timeInPosition": 6 - }, { - "id": 95, - "name": "Odette Sears", - "reportsTo": 90, - "phone": "(264) 818-6576", - "extension": 1914, - "hireDate": new Date(2013, 7, 5), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 45, - "name": "Zelda Medina", - "reportsTo": 32, - "phone": "(563) 359-6023", - "extension": 2600, - "hireDate": new Date(2012, 11, 6), - "fullTime": true, - "position": "QA Architect", - "timeInPosition": 2 - }] - }, { - "id": 52, - "name": "Skyler Cleveland", - "reportsTo": 2, - "phone": "(217) 280-5300", - "extension": 9655, - "hireDate": new Date(2014, 11, 10), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 40, - "name": "Karleigh Garza", - "reportsTo": 52, - "phone": "(370) 983-8796", - "extension": 4044, - "hireDate": new Date(2014, 3, 10), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 49, - "name": "Elmo Tyson", - "reportsTo": 40, - "phone": "(344) 496-9555", - "extension": 6950, - "hireDate": new Date(2014, 9, 18), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 72, - "name": "Stacey Lynn", - "reportsTo": 40, - "phone": "(140) 772-7509", - "extension": 8396, - "hireDate": new Date(2014, 7, 31), - "fullTime": false, - "position": "QA Engineer", - "timeInPosition": 1, - "employees": [{ - "id": 80, - "name": "Meredith Parrish", - "reportsTo": 72, - "phone": "(714) 284-2408", - "extension": 7675, - "hireDate": new Date(2012, 11, 13), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 6 - }] - }, { - "id": 96, - "name": "Cassady Whitley", - "reportsTo": 40, - "phone": "(996) 587-8405", - "extension": 780, - "hireDate": new Date(2013, 5, 7), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 97, - "name": "Haviva Campbell", - "reportsTo": 40, - "phone": "(263) 887-4689", - "extension": 2808, - "hireDate": new Date(2013, 3, 5), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 2 - }, { - "id": 98, - "name": "Cameron Ayers", - "reportsTo": 40, - "phone": "(470) 709-8030", - "extension": 2893, - "hireDate": new Date(2013, 8, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 3 - }, { - "id": 99, - "name": "Martha Sargent", - "reportsTo": 40, - "phone": "(587) 812-4418", - "extension": 5099, - "hireDate": new Date(2014, 2, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 100, - "name": "Darrel Kinney", - "reportsTo": 40, - "phone": "(888) 483-9606", - "extension": 4779, - "hireDate": new Date(2014, 3, 24), - "fullTime": false, - "position": "Graphic Designer", - "timeInPosition": 1 - }] - }, { - "id": 54, - "name": "Kuame Frye", - "reportsTo": 52, - "phone": "(360) 721-5886", - "extension": 2730, - "hireDate": new Date(2010, 11, 17), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 1, - "employees": [{ - "id": 64, - "name": "Ori Wynn", - "reportsTo": 54, - "phone": "(366) 342-0166", - "extension": 7252, - "hireDate": new Date(2015, 6, 21), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 0, - "employees": [{ - "id": 6, - "name": "Moses Duncan", - "reportsTo": 64, - "phone": "(421) 611-4814", - "extension": 669, - "hireDate": new Date(2010, 5, 24), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 12, - "name": "Jamalia Wallace", - "reportsTo": 64, - "phone": "(611) 391-8016", - "extension": 1952, - "hireDate": new Date(2011, 9, 8), - "fullTime": true, - "position": "Junior Designer", - "timeInPosition": 3 - }, { - "id": 62, - "name": "Palmer Gregory", - "reportsTo": 64, - "phone": "(360) 430-2505", - "extension": 4337, - "hireDate": new Date(2014, 8, 30), - "fullTime": true, - "position": "Designer", - "timeInPosition": 4 - }, { - "id": 68, - "name": "Mallory Gilliam", - "reportsTo": 64, - "phone": "(878) 423-2971", - "extension": 1341, - "hireDate": new Date(2014, 7, 24), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 1 - }, { - "id": 73, - "name": "Ima Hughes", - "reportsTo": 64, - "phone": "(905) 485-8001", - "extension": 1273, - "hireDate": new Date(2013, 6, 3), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }, { - "id": 79, - "name": "Duncan Mathews", - "reportsTo": 64, - "phone": "(790) 971-9709", - "extension": 4573, - "hireDate": new Date(2011, 8, 21), - "fullTime": false, - "position": "Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 69, - "name": "Sierra Beasley", - "reportsTo": 52, - "phone": "(271) 953-1968", - "extension": 3324, - "hireDate": new Date(2011, 4, 2), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 3, - "employees": [{ - "id": 38, - "name": "Elton Tucker", - "reportsTo": 69, - "phone": "(988) 930-9331", - "extension": 9216, - "hireDate": new Date(2015, 6, 4), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 1 - }, { - "id": 39, - "name": "Iona Brennan", - "reportsTo": 69, - "phone": "(356) 563-0600", - "extension": 5634, - "hireDate": new Date(2010, 9, 23), - "fullTime": true, - "position": "Junior Support Officer", - "timeInPosition": 4 - }, { - "id": 53, - "name": "Paul Campos", - "reportsTo": 69, - "phone": "(899) 205-1689", - "extension": 8586, - "hireDate": new Date(2011, 3, 17), - "fullTime": true, - "position": "Interaction Designer", - "timeInPosition": 4, - "employees": [{ - "id": 66, - "name": "Gloria Freeman", - "reportsTo": 53, - "phone": "(344) 950-9168", - "extension": 4738, - "hireDate": new Date(2013, 5, 6), - "fullTime": true, - "position": "Junior Interaction Designer", - "timeInPosition": 0 - }] - }, { - "id": 57, - "name": "Alyssa Hansen", - "reportsTo": 69, - "phone": "(548) 925-4799", - "extension": 4716, - "hireDate": new Date(2011, 1, 19), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 82, - "name": "Yael Walters", - "reportsTo": 69, - "phone": "(311) 489-8191", - "extension": 6520, - "hireDate": new Date(2013, 7, 4), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 87, - "name": "Dahlia Hunt", - "reportsTo": 69, - "phone": "(720) 339-5202", - "extension": 3690, - "hireDate": new Date(2011, 3, 26), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 4 - }, { - "id": 94, - "name": "Adria Stanley", - "reportsTo": 69, - "phone": "(536) 357-6391", - "extension": 3374, - "hireDate": new Date(2014, 7, 26), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }] - }] - }] - }, { - "id": 3, - "name": "Priscilla Frank", - "reportsTo": 1, - "phone": "(278) 927-2684", - "extension": 4183, - "hireDate": new Date(2014, 11, 30), - "fullTime": true, - "position": "Chief Product Officer", - "timeInPosition": 2, - "employees": [{ - "id": 4, - "name": "Ursula Holmes", - "reportsTo": 3, - "phone": "(302) 760-2034", - "extension": 2226, - "hireDate": new Date(2011, 6, 6), - "fullTime": true, - "position": "EVP, Product Strategy", - "timeInPosition": 4 - }, { - "id": 24, - "name": "Melvin Carrillo", - "reportsTo": 3, - "phone": "(348) 933-5167", - "extension": 2482, - "hireDate": new Date(2014, 7, 21), - "fullTime": true, - "position": "Director, Developer Relations", - "timeInPosition": 6, - "employees": [{ - "id": 29, - "name": "Martha Chavez", - "reportsTo": 24, - "phone": "(860) 754-3464", - "extension": 4531, - "hireDate": new Date(2013, 3, 12), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 30, - "name": "Oren Fox", - "reportsTo": 24, - "phone": "(572) 414-3299", - "extension": 4849, - "hireDate": new Date(2013, 5, 14), - "fullTime": false, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 41, - "name": "Amos Barr", - "reportsTo": 24, - "phone": "(470) 381-3718", - "extension": 7643, - "hireDate": new Date(2010, 3, 9), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 2 - }] - }] - }, { - "id": 5, - "name": "Anika Vega", - "reportsTo": 1, - "phone": "(910) 714-1802", - "extension": 6353, - "hireDate": new Date(2010, 2, 25), - "fullTime": true, - "position": "Chief Process Officer", - "timeInPosition": 5, - "employees": [{ - "id": 10, - "name": "Vernon Ballard", - "reportsTo": 5, - "phone": "(702) 185-8890", - "extension": 9242, - "hireDate": new Date(2015, 6, 26), - "fullTime": true, - "position": "Director Facilities", - "timeInPosition": 2, - "employees": [{ - "id": 16, - "name": "Ali Guy", - "reportsTo": 10, - "phone": "(429) 912-6578", - "extension": 2225, - "hireDate": new Date(2014, 6, 29), - "fullTime": true, - "position": "Operations Manager", - "timeInPosition": 4, - "employees": [{ - "id": 23, - "name": "Bruce Reilly", - "reportsTo": 16, - "phone": "(995) 243-7302", - "extension": 4815, - "hireDate": new Date(2015, 4, 1), - "fullTime": true, - "position": "Head of Security", - "timeInPosition": 1, - "employees": [{ - "id": 26, - "name": "Rowan Morin", - "reportsTo": 23, - "phone": "(792) 141-4374", - "extension": 1844, - "hireDate": new Date(2015, 7, 30), - "fullTime": true, - "position": "Building Security", - "timeInPosition": 5 - }, { - "id": 44, - "name": "Benedict Soto", - "reportsTo": 23, - "phone": "(822) 282-5991", - "extension": 6422, - "hireDate": new Date(2012, 6, 1), - "fullTime": false, - "position": "Building Security", - "timeInPosition": 4 - }] - }, { - "id": 48, - "name": "Maryam Rios", - "reportsTo": 16, - "phone": "(673) 764-6720", - "extension": 531, - "hireDate": new Date(2014, 3, 3), - "fullTime": true, - "position": "Team Lead, Personal Assistants", - "timeInPosition": 1, - "employees": [{ - "id": 58, - "name": "Rose Mcintyre", - "reportsTo": 48, - "phone": "(771) 615-4590", - "extension": 7094, - "hireDate": new Date(2015, 6, 30), - "fullTime": false, - "position": "Personal Assistant", - "timeInPosition": 6 - }] - }] - }] - }] - }, { - "id": 7, - "name": "Nevada Hart", - "reportsTo": 1, - "phone": "(254) 220-1576", - "extension": 6649, - "hireDate": new Date(2015, 8, 17), - "fullTime": true, - "position": "Chief Financial Officer", - "timeInPosition": 6, - "employees": [{ - "id": 14, - "name": "Zena Sanford", - "reportsTo": 7, - "phone": "(437) 568-8160", - "extension": 4452, - "hireDate": new Date(2010, 11, 30), - "fullTime": true, - "position": "VP, Finance", - "timeInPosition": 4 - }, { - "id": 15, - "name": "Quinlan Howe", - "reportsTo": 7, - "phone": "(464) 334-9748", - "extension": 8722, - "hireDate": new Date(2011, 6, 9), - "fullTime": false, - "position": "Senior Director, Finance", - "timeInPosition": 0, - "employees": [{ - "id": 17, - "name": "Indira Lopez", - "reportsTo": 15, - "phone": "(301) 368-0938", - "extension": 8027, - "hireDate": new Date(2013, 8, 18), - "fullTime": true, - "position": "ERP Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 18, - "name": "Lareina Lara", - "reportsTo": 17, - "phone": "(233) 457-7482", - "extension": 1996, - "hireDate": new Date(2010, 4, 30), - "fullTime": true, - "position": "ERP Solutions Consultant", - "timeInPosition": 6 - }, { - "id": 19, - "name": "Maxwell Wise", - "reportsTo": 17, - "phone": "(570) 494-2531", - "extension": 9865, - "hireDate": new Date(2012, 5, 19), - "fullTime": true, - "position": "Systems Engineer", - "timeInPosition": 0 - }] - }, { - "id": 20, - "name": "Hunter Mcbride", - "reportsTo": 15, - "phone": "(409) 442-7016", - "extension": 4284, - "hireDate": new Date(2012, 10, 20), - "fullTime": true, - "position": "Senior Director, Tax", - "timeInPosition": 3 - }, { - "id": 21, - "name": "Jana Serrano", - "reportsTo": 15, - "phone": "(910) 718-4620", - "extension": 6970, - "hireDate": new Date(2010, 4, 2), - "fullTime": true, - "position": "Financial Planning & Analysis Manager", - "timeInPosition": 2 - }, { - "id": 22, - "name": "Zachery Shelton", - "reportsTo": 15, - "phone": "(310) 240-8675", - "extension": 4527, - "hireDate": new Date(2011, 11, 23), - "fullTime": false, - "position": "Corporate Finance Controller", - "timeInPosition": 6, - "employees": [{ - "id": 28, - "name": "Cullen Freeman", - "reportsTo": 22, - "phone": "(136) 554-8814", - "extension": 9861, - "hireDate": new Date(2014, 3, 15), - "fullTime": true, - "position": "Treasurer Accountant", - "timeInPosition": 2 - }, { - "id": 31, - "name": "Quinn Dean", - "reportsTo": 22, - "phone": "(152) 613-3507", - "extension": 6621, - "hireDate": new Date(2015, 1, 29), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 6 - }, { - "id": 34, - "name": "Samantha Brady", - "reportsTo": 22, - "phone": "(206) 398-4328", - "extension": 1157, - "hireDate": new Date(2011, 2, 13), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 2, - "employees": [{ - "id": 35, - "name": "Tamara Green", - "reportsTo": 34, - "phone": "(219) 248-2789", - "extension": 4880, - "hireDate": new Date(2014, 2, 4), - "fullTime": true, - "position": "Junior Accountant", - "timeInPosition": 6 - }] - }, { - "id": 36, - "name": "Olympia Coleman", - "reportsTo": 22, - "phone": "(944) 853-6383", - "extension": 2136, - "hireDate": new Date(2013, 7, 31), - "fullTime": true, - "position": "Collections Manager", - "timeInPosition": 3 - }, { - "id": 37, - "name": "Breanna Goodwin", - "reportsTo": 22, - "phone": "(379) 988-9630", - "extension": 5898, - "hireDate": new Date(2010, 5, 23), - "fullTime": false, - "position": "Payroll Specialist", - "timeInPosition": 4 - }] - }, { - "id": 27, - "name": "Curran Travis", - "reportsTo": 15, - "phone": "(438) 135-8033", - "extension": 3841, - "hireDate": new Date(2011, 6, 13), - "fullTime": true, - "position": "Finance Controller", - "timeInPosition": 5 - }] - }] - }, { - "id": 8, - "name": "Hunter Fry", - "reportsTo": 1, - "phone": "(766) 358-9858", - "extension": 3741, - "hireDate": new Date(2011, 2, 12), - "fullTime": false, - "position": "General Counsel", - "timeInPosition": 3, - "employees": [{ - "id": 9, - "name": "Kuame Carrillo", - "reportsTo": 8, - "phone": "(192) 383-1305", - "extension": 9228, - "hireDate": new Date(2011, 2, 22), - "fullTime": true, - "position": "Associate General Councel", - "timeInPosition": 0 - }, { - "id": 13, - "name": "Stacy Todd", - "reportsTo": 8, - "phone": "(925) 286-3327", - "extension": 8565, - "hireDate": new Date(2014, 7, 5), - "fullTime": true, - "position": "Councel", - "timeInPosition": 0 - }, { - "id": 33, - "name": "Valentine Wyatt", - "reportsTo": 8, - "phone": "(165) 166-6205", - "extension": 3588, - "hireDate": new Date(2015, 5, 21), - "fullTime": true, - "position": "Councel", - "timeInPosition": 5 - }, { - "id": 86, - "name": "Daniel Mccarthy", - "reportsTo": 8, - "phone": "(624) 483-6206", - "extension": 9112, - "hireDate": new Date(2013, 12, 3), - "fullTime": false, - "position": "Staff Attorney", - "timeInPosition": 0 - }] - }] - }]; - export default employees; \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/main.jsx b/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-custom-expand-cell/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/app.jsx b/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/app.jsx deleted file mode 100644 index 221e0367..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/app.jsx +++ /dev/null @@ -1,239 +0,0 @@ -import * as React from 'react'; -import { - TreeList, - TreeListToolbar, - mapTree, - extendDataItem, - removeItems, - modifySubItems, - TreeListTextEditor, - TreeListBooleanEditor, -} from '@progress/kendo-react-treelist'; -import MyCommandCell from './my-command-cell'; -import employees from './data'; -const subItemsField = 'employees'; -const expandField = 'expanded'; -const editField = 'inEdit'; - -const MyContext = React.createContext({ - currentIDToFocus: () => {}, -}); - -const getAdditionalProps = (cellField, dataItem) => { - const currentContext = React.useContext(MyContext); - const activeElement = document.activeElement; - - //change 'name' with the field that you want to focus - return cellField && - cellField === 'name' && - dataItem.id == currentContext.currentIDToFocus //checking if the dataItem is the same as the last item opened for editing - ? { - ref: (td) => { - const input = td && td.querySelector('input'); - currentContext.setCurrentIDToFocus(null); - if (!input || activeElement == input) { - return; - } - - if (input.type === 'checkbox') { - input.focus(); - } else { - input.select(); - } - }, - } - : null; -}; -const CellRender = (cell, props) => { - const dataItem = props.dataItem; - const cellField = props.field; - const additionalProps = getAdditionalProps(cellField, dataItem); - - const clonedProps = { ...cell.props, ...additionalProps }; - return React.cloneElement(cell, clonedProps, cell.props.children); -}; - -const App = () => { - const [state, setState] = React.useState({ - data: employees.slice(), - expanded: [1, 2, 32], - inEdit: [], - }); - - const [currentIDToFocus, setCurrentIDToFocus] = React.useState(null); - const addChild = (dataItem) => { - const newRecord = createNewItem(); - setState({ - ...state, - inEdit: [...state.inEdit, newRecord], - expanded: [...state.expanded, dataItem.id], - data: modifySubItems( - state.data, - subItemsField, - (item) => item.id === dataItem.id, - (subItems) => [newRecord, ...subItems] - ), - }); - }; - - const enterEdit = (dataItem) => { - if (dataItem != null) { - //Updating the state with the newly edited ID - setCurrentIDToFocus(dataItem.id); - } - setState({ - ...state, - inEdit: [...state.inEdit, extendDataItem(dataItem, subItemsField)], - }); - }; - - const save = (dataItem) => { - const { isNew, inEdit, ...itemToSave } = dataItem; - setState({ - ...state, - data: mapTree(state.data, subItemsField, (item) => - item.id === itemToSave.id ? itemToSave : item - ), - inEdit: state.inEdit.filter((i) => i.id !== itemToSave.id), - }); - }; - - const cancel = (editedItem) => { - const { inEdit, data } = state; - - if (editedItem.isNew) { - return remove(editedItem); - } - - setState({ - ...state, - data: mapTree(data, subItemsField, (item) => - item.id === editedItem.id ? inEdit.find((i) => i.id === item.id) : item - ), - inEdit: inEdit.filter((i) => i.id !== editedItem.id), - }); - }; - - const remove = (dataItem) => { - setState({ - ...state, - data: removeItems(state.data, subItemsField, (i) => i.id === dataItem.id), - inEdit: state.inEdit.filter((i) => i.id !== dataItem.id), - }); - }; - - const onExpandChange = (e) => { - setState({ - ...state, - expanded: e.value - ? state.expanded.filter((id) => id !== e.dataItem.id) - : [...state.expanded, e.dataItem.id], - }); - }; - - const onItemChange = (event) => { - const field = event.field; - setState({ - ...state, - data: mapTree(state.data, subItemsField, (item) => - item.id === event.dataItem.id - ? extendDataItem(item, subItemsField, { - [field]: event.value, - }) - : item - ), - }); - }; - - const addRecord = () => { - const newRecord = createNewItem(); - setState({ - ...state, - data: [newRecord, ...state.data], - inEdit: [...state.inEdit, { ...newRecord }], - }); - }; - - const createNewItem = () => { - const timestamp = new Date().getTime(); - //Here we need an unique ID for the new item - //We are setting a timestamp, but should be replaced with the corresponding logic for setting the ID value - setCurrentIDToFocus(timestamp); - return { - id: timestamp, - isNew: true, - }; - }; - - const CommandCell = MyCommandCell( - enterEdit, - remove, - save, - cancel, - addChild, - editField - ); - const columns = [ - { - field: 'name', - title: 'Name', - width: 280, - editCell: TreeListTextEditor, - expandable: true, - }, - { - field: 'position', - title: 'position', - width: 280, - editCell: TreeListTextEditor, - }, - { - cell: CommandCell, - width: 360, - }, - ]; - const { data, expanded, inEdit } = state; - - return ( - - - extendDataItem(item, subItemsField, { - [expandField]: expanded.includes(item.id), - [editField]: Boolean(inEdit.find((i) => i.id === item.id)), - }) - )} - editField={editField} - expandField={expandField} - subItemsField={subItemsField} - onItemChange={onItemChange} - onExpandChange={onExpandChange} - columns={columns} - navigatable={true} - toolbar={ - - - - } - /> - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/data.js b/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/data.js deleted file mode 100644 index ab659696..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/data.js +++ /dev/null @@ -1,1020 +0,0 @@ -const employees = [{ - "id": 1, - "name": "Daryl Sweeney", - "reportsTo": null, - "phone": "(555) 924-9726", - "extension": 8253, - "hireDate": new Date(2012, 2, 7), - "fullTime": true, - "position": "CEO", - "timeInPosition": 2, - "employees": [{ - "id": 2, - "name": "Guy Wooten", - "reportsTo": 1, - "phone": "(438) 738-4935", - "extension": 1155, - "hireDate": new Date(2010, 3, 3), - "fullTime": true, - "position": "Chief Technical Officer", - "timeInPosition": 1, - "employees": [{ - "id": 32, - "name": "Buffy Weber", - "reportsTo": 2, - "phone": "(699) 838-6121", - "extension": 8933, - "hireDate": new Date(2011, 7, 11), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 11, - "name": "Hyacinth Hood", - "reportsTo": 32, - "phone": "(889) 345-2438", - "extension": 8564, - "hireDate": new Date(2014, 2, 3), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 60, - "name": "Akeem Carr", - "reportsTo": 11, - "phone": "(738) 136-2814", - "extension": 9353, - "hireDate": new Date(2011, 4, 21), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 78, - "name": "Rinah Simon", - "reportsTo": 11, - "phone": "(285) 912-5271", - "extension": 7795, - "hireDate": new Date(2012, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }] - }, { - "id": 42, - "name": "Gage Daniels", - "reportsTo": 32, - "phone": "(107) 290-6260", - "extension": 896, - "hireDate": new Date(2013, 5, 16), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 5 - }, { - "id": 43, - "name": "Constance Vazquez", - "reportsTo": 32, - "phone": "(800) 301-1978", - "extension": 5141, - "hireDate": new Date(2011, 6, 7), - "fullTime": true, - "position": "Director, Engineering", - "timeInPosition": 1, - "employees": [{ - "id": 46, - "name": "Darrel Solis", - "reportsTo": 43, - "phone": "(327) 977-0216", - "extension": 7779, - "hireDate": new Date(2015, 4, 25), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 47, - "name": "Brian Yang", - "reportsTo": 46, - "phone": "(565) 146-5435", - "extension": 3885, - "hireDate": new Date(2012, 9, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 50, - "name": "Lillian Bradshaw", - "reportsTo": 46, - "phone": "(323) 509-3479", - "extension": 5426, - "hireDate": new Date(2014, 5, 10), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 2 - }, { - "id": 51, - "name": "Christian Palmer", - "reportsTo": 46, - "phone": "(490) 421-8718", - "extension": 3706, - "hireDate": new Date(2012, 12, 27), - "fullTime": false, - "position": "Technical Lead", - "timeInPosition": 1 - }, { - "id": 55, - "name": "Summer Mosley", - "reportsTo": 46, - "phone": "(784) 962-2301", - "extension": 5492, - "hireDate": new Date(2010, 3, 2), - "fullTime": true, - "position": "QA Engineer", - "timeInPosition": 5 - }, { - "id": 56, - "name": "Barry Ayers", - "reportsTo": 46, - "phone": "(452) 373-9227", - "extension": 1308, - "hireDate": new Date(2011, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 59, - "name": "Keiko Espinoza", - "reportsTo": 46, - "phone": "(226) 600-5305", - "extension": 9363, - "hireDate": new Date(2011, 9, 18), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 4 - }, { - "id": 61, - "name": "Candace Pickett", - "reportsTo": 46, - "phone": "(120) 117-7475", - "extension": 5178, - "hireDate": new Date(2010, 5, 6), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }] - }, { - "id": 63, - "name": "Mia Caldwell", - "reportsTo": 43, - "phone": "(848) 636-6470", - "extension": 6368, - "hireDate": new Date(2012, 10, 7), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 65, - "name": "Thomas Terry", - "reportsTo": 63, - "phone": "(764) 831-4248", - "extension": 3574, - "hireDate": new Date(2015, 6, 15), - "fullTime": false, - "position": "Senior Enterprise Support Officer", - "timeInPosition": 2 - }, { - "id": 67, - "name": "Ruth Downs", - "reportsTo": 63, - "phone": "(138) 991-1440", - "extension": 8067, - "hireDate": new Date(2013, 7, 13), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 70, - "name": "Yasir Wilder", - "reportsTo": 63, - "phone": "(759) 701-8665", - "extension": 8350, - "hireDate": new Date(2010, 11, 8), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 3 - }, { - "id": 71, - "name": "Flavia Short", - "reportsTo": 63, - "phone": "(370) 133-9238", - "extension": 6390, - "hireDate": new Date(2013, 2, 21), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }, { - "id": 74, - "name": "Aaron Roach", - "reportsTo": 63, - "phone": "(958) 717-9230", - "extension": 4899, - "hireDate": new Date(2011, 7, 30), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 75, - "name": "Eric Russell", - "reportsTo": 63, - "phone": "(516) 575-8505", - "extension": 2224, - "hireDate": new Date(2012, 10, 28), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 76, - "name": "Cheyenne Olson", - "reportsTo": 63, - "phone": "(241) 645-0257", - "extension": 9181, - "hireDate": new Date(2015, 5, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 77, - "name": "Shaine Avila", - "reportsTo": 63, - "phone": "(844) 435-1360", - "extension": 3374, - "hireDate": new Date(2010, 1, 31), - "fullTime": true, - "position": "UI Designer", - "timeInPosition": 5 - }, { - "id": 81, - "name": "Chantale Long", - "reportsTo": 63, - "phone": "(252) 419-6891", - "extension": 7868, - "hireDate": new Date(2010, 6, 17), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 1 - }, { - "id": 83, - "name": "Dane Cruz", - "reportsTo": 63, - "phone": "(946) 701-6165", - "extension": 3828, - "hireDate": new Date(2014, 10, 8), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 84, - "name": "Regan Patterson", - "reportsTo": 63, - "phone": "(265) 946-1765", - "extension": 6955, - "hireDate": new Date(2012, 3, 1), - "fullTime": true, - "position": "Technical Writer", - "timeInPosition": 6 - }, { - "id": 85, - "name": "Drew Mckay", - "reportsTo": 63, - "phone": "(327) 293-0162", - "extension": 6904, - "hireDate": new Date(2011, 3, 25), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 88, - "name": "Bevis Miller", - "reportsTo": 63, - "phone": "(525) 557-0169", - "extension": 6978, - "hireDate": new Date(2011, 4, 19), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 89, - "name": "Bruce Mccarty", - "reportsTo": 63, - "phone": "(936) 777-8730", - "extension": 6552, - "hireDate": new Date(2014, 3, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 5 - }] - }, { - "id": 90, - "name": "Ocean Blair", - "reportsTo": 43, - "phone": "(343) 586-6614", - "extension": 1424, - "hireDate": new Date(2011, 4, 27), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 2, - "employees": [{ - "id": 91, - "name": "Guinevere Osborn", - "reportsTo": 90, - "phone": "(424) 741-0006", - "extension": 3166, - "hireDate": new Date(2014, 11, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 92, - "name": "Olga Strong", - "reportsTo": 90, - "phone": "(949) 417-1168", - "extension": 4568, - "hireDate": new Date(2015, 5, 28), - "fullTime": true, - "position": "Graphic Designer", - "timeInPosition": 4 - }, { - "id": 93, - "name": "Robert Orr", - "reportsTo": 90, - "phone": "(977) 341-3721", - "extension": 9241, - "hireDate": new Date(2012, 8, 20), - "fullTime": false, - "position": "Support Officer", - "timeInPosition": 6 - }, { - "id": 95, - "name": "Odette Sears", - "reportsTo": 90, - "phone": "(264) 818-6576", - "extension": 1914, - "hireDate": new Date(2013, 7, 5), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 45, - "name": "Zelda Medina", - "reportsTo": 32, - "phone": "(563) 359-6023", - "extension": 2600, - "hireDate": new Date(2012, 11, 6), - "fullTime": true, - "position": "QA Architect", - "timeInPosition": 2 - }] - }, { - "id": 52, - "name": "Skyler Cleveland", - "reportsTo": 2, - "phone": "(217) 280-5300", - "extension": 9655, - "hireDate": new Date(2014, 11, 10), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 40, - "name": "Karleigh Garza", - "reportsTo": 52, - "phone": "(370) 983-8796", - "extension": 4044, - "hireDate": new Date(2014, 3, 10), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 49, - "name": "Elmo Tyson", - "reportsTo": 40, - "phone": "(344) 496-9555", - "extension": 6950, - "hireDate": new Date(2014, 9, 18), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 72, - "name": "Stacey Lynn", - "reportsTo": 40, - "phone": "(140) 772-7509", - "extension": 8396, - "hireDate": new Date(2014, 7, 31), - "fullTime": false, - "position": "QA Engineer", - "timeInPosition": 1, - "employees": [{ - "id": 80, - "name": "Meredith Parrish", - "reportsTo": 72, - "phone": "(714) 284-2408", - "extension": 7675, - "hireDate": new Date(2012, 11, 13), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 6 - }] - }, { - "id": 96, - "name": "Cassady Whitley", - "reportsTo": 40, - "phone": "(996) 587-8405", - "extension": 780, - "hireDate": new Date(2013, 5, 7), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 97, - "name": "Haviva Campbell", - "reportsTo": 40, - "phone": "(263) 887-4689", - "extension": 2808, - "hireDate": new Date(2013, 3, 5), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 2 - }, { - "id": 98, - "name": "Cameron Ayers", - "reportsTo": 40, - "phone": "(470) 709-8030", - "extension": 2893, - "hireDate": new Date(2013, 8, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 3 - }, { - "id": 99, - "name": "Martha Sargent", - "reportsTo": 40, - "phone": "(587) 812-4418", - "extension": 5099, - "hireDate": new Date(2014, 2, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 100, - "name": "Darrel Kinney", - "reportsTo": 40, - "phone": "(888) 483-9606", - "extension": 4779, - "hireDate": new Date(2014, 3, 24), - "fullTime": false, - "position": "Graphic Designer", - "timeInPosition": 1 - }] - }, { - "id": 54, - "name": "Kuame Frye", - "reportsTo": 52, - "phone": "(360) 721-5886", - "extension": 2730, - "hireDate": new Date(2010, 11, 17), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 1, - "employees": [{ - "id": 64, - "name": "Ori Wynn", - "reportsTo": 54, - "phone": "(366) 342-0166", - "extension": 7252, - "hireDate": new Date(2015, 6, 21), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 0, - "employees": [{ - "id": 6, - "name": "Moses Duncan", - "reportsTo": 64, - "phone": "(421) 611-4814", - "extension": 669, - "hireDate": new Date(2010, 5, 24), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 12, - "name": "Jamalia Wallace", - "reportsTo": 64, - "phone": "(611) 391-8016", - "extension": 1952, - "hireDate": new Date(2011, 9, 8), - "fullTime": true, - "position": "Junior Designer", - "timeInPosition": 3 - }, { - "id": 62, - "name": "Palmer Gregory", - "reportsTo": 64, - "phone": "(360) 430-2505", - "extension": 4337, - "hireDate": new Date(2014, 8, 30), - "fullTime": true, - "position": "Designer", - "timeInPosition": 4 - }, { - "id": 68, - "name": "Mallory Gilliam", - "reportsTo": 64, - "phone": "(878) 423-2971", - "extension": 1341, - "hireDate": new Date(2014, 7, 24), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 1 - }, { - "id": 73, - "name": "Ima Hughes", - "reportsTo": 64, - "phone": "(905) 485-8001", - "extension": 1273, - "hireDate": new Date(2013, 6, 3), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }, { - "id": 79, - "name": "Duncan Mathews", - "reportsTo": 64, - "phone": "(790) 971-9709", - "extension": 4573, - "hireDate": new Date(2011, 8, 21), - "fullTime": false, - "position": "Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 69, - "name": "Sierra Beasley", - "reportsTo": 52, - "phone": "(271) 953-1968", - "extension": 3324, - "hireDate": new Date(2011, 4, 2), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 3, - "employees": [{ - "id": 38, - "name": "Elton Tucker", - "reportsTo": 69, - "phone": "(988) 930-9331", - "extension": 9216, - "hireDate": new Date(2015, 6, 4), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 1 - }, { - "id": 39, - "name": "Iona Brennan", - "reportsTo": 69, - "phone": "(356) 563-0600", - "extension": 5634, - "hireDate": new Date(2010, 9, 23), - "fullTime": true, - "position": "Junior Support Officer", - "timeInPosition": 4 - }, { - "id": 53, - "name": "Paul Campos", - "reportsTo": 69, - "phone": "(899) 205-1689", - "extension": 8586, - "hireDate": new Date(2011, 3, 17), - "fullTime": true, - "position": "Interaction Designer", - "timeInPosition": 4, - "employees": [{ - "id": 66, - "name": "Gloria Freeman", - "reportsTo": 53, - "phone": "(344) 950-9168", - "extension": 4738, - "hireDate": new Date(2013, 5, 6), - "fullTime": true, - "position": "Junior Interaction Designer", - "timeInPosition": 0 - }] - }, { - "id": 57, - "name": "Alyssa Hansen", - "reportsTo": 69, - "phone": "(548) 925-4799", - "extension": 4716, - "hireDate": new Date(2011, 1, 19), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 82, - "name": "Yael Walters", - "reportsTo": 69, - "phone": "(311) 489-8191", - "extension": 6520, - "hireDate": new Date(2013, 7, 4), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 87, - "name": "Dahlia Hunt", - "reportsTo": 69, - "phone": "(720) 339-5202", - "extension": 3690, - "hireDate": new Date(2011, 3, 26), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 4 - }, { - "id": 94, - "name": "Adria Stanley", - "reportsTo": 69, - "phone": "(536) 357-6391", - "extension": 3374, - "hireDate": new Date(2014, 7, 26), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }] - }] - }] - }, { - "id": 3, - "name": "Priscilla Frank", - "reportsTo": 1, - "phone": "(278) 927-2684", - "extension": 4183, - "hireDate": new Date(2014, 11, 30), - "fullTime": true, - "position": "Chief Product Officer", - "timeInPosition": 2, - "employees": [{ - "id": 4, - "name": "Ursula Holmes", - "reportsTo": 3, - "phone": "(302) 760-2034", - "extension": 2226, - "hireDate": new Date(2011, 6, 6), - "fullTime": true, - "position": "EVP, Product Strategy", - "timeInPosition": 4 - }, { - "id": 24, - "name": "Melvin Carrillo", - "reportsTo": 3, - "phone": "(348) 933-5167", - "extension": 2482, - "hireDate": new Date(2014, 7, 21), - "fullTime": true, - "position": "Director, Developer Relations", - "timeInPosition": 6, - "employees": [{ - "id": 29, - "name": "Martha Chavez", - "reportsTo": 24, - "phone": "(860) 754-3464", - "extension": 4531, - "hireDate": new Date(2013, 3, 12), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 30, - "name": "Oren Fox", - "reportsTo": 24, - "phone": "(572) 414-3299", - "extension": 4849, - "hireDate": new Date(2013, 5, 14), - "fullTime": false, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 41, - "name": "Amos Barr", - "reportsTo": 24, - "phone": "(470) 381-3718", - "extension": 7643, - "hireDate": new Date(2010, 3, 9), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 2 - }] - }] - }, { - "id": 5, - "name": "Anika Vega", - "reportsTo": 1, - "phone": "(910) 714-1802", - "extension": 6353, - "hireDate": new Date(2010, 2, 25), - "fullTime": true, - "position": "Chief Process Officer", - "timeInPosition": 5, - "employees": [{ - "id": 10, - "name": "Vernon Ballard", - "reportsTo": 5, - "phone": "(702) 185-8890", - "extension": 9242, - "hireDate": new Date(2015, 6, 26), - "fullTime": true, - "position": "Director Facilities", - "timeInPosition": 2, - "employees": [{ - "id": 16, - "name": "Ali Guy", - "reportsTo": 10, - "phone": "(429) 912-6578", - "extension": 2225, - "hireDate": new Date(2014, 6, 29), - "fullTime": true, - "position": "Operations Manager", - "timeInPosition": 4, - "employees": [{ - "id": 23, - "name": "Bruce Reilly", - "reportsTo": 16, - "phone": "(995) 243-7302", - "extension": 4815, - "hireDate": new Date(2015, 4, 1), - "fullTime": true, - "position": "Head of Security", - "timeInPosition": 1, - "employees": [{ - "id": 26, - "name": "Rowan Morin", - "reportsTo": 23, - "phone": "(792) 141-4374", - "extension": 1844, - "hireDate": new Date(2015, 7, 30), - "fullTime": true, - "position": "Building Security", - "timeInPosition": 5 - }, { - "id": 44, - "name": "Benedict Soto", - "reportsTo": 23, - "phone": "(822) 282-5991", - "extension": 6422, - "hireDate": new Date(2012, 6, 1), - "fullTime": false, - "position": "Building Security", - "timeInPosition": 4 - }] - }, { - "id": 48, - "name": "Maryam Rios", - "reportsTo": 16, - "phone": "(673) 764-6720", - "extension": 531, - "hireDate": new Date(2014, 3, 3), - "fullTime": true, - "position": "Team Lead, Personal Assistants", - "timeInPosition": 1, - "employees": [{ - "id": 58, - "name": "Rose Mcintyre", - "reportsTo": 48, - "phone": "(771) 615-4590", - "extension": 7094, - "hireDate": new Date(2015, 6, 30), - "fullTime": false, - "position": "Personal Assistant", - "timeInPosition": 6 - }] - }] - }] - }] - }, { - "id": 7, - "name": "Nevada Hart", - "reportsTo": 1, - "phone": "(254) 220-1576", - "extension": 6649, - "hireDate": new Date(2015, 8, 17), - "fullTime": true, - "position": "Chief Financial Officer", - "timeInPosition": 6, - "employees": [{ - "id": 14, - "name": "Zena Sanford", - "reportsTo": 7, - "phone": "(437) 568-8160", - "extension": 4452, - "hireDate": new Date(2010, 11, 30), - "fullTime": true, - "position": "VP, Finance", - "timeInPosition": 4 - }, { - "id": 15, - "name": "Quinlan Howe", - "reportsTo": 7, - "phone": "(464) 334-9748", - "extension": 8722, - "hireDate": new Date(2011, 6, 9), - "fullTime": false, - "position": "Senior Director, Finance", - "timeInPosition": 0, - "employees": [{ - "id": 17, - "name": "Indira Lopez", - "reportsTo": 15, - "phone": "(301) 368-0938", - "extension": 8027, - "hireDate": new Date(2013, 8, 18), - "fullTime": true, - "position": "ERP Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 18, - "name": "Lareina Lara", - "reportsTo": 17, - "phone": "(233) 457-7482", - "extension": 1996, - "hireDate": new Date(2010, 4, 30), - "fullTime": true, - "position": "ERP Solutions Consultant", - "timeInPosition": 6 - }, { - "id": 19, - "name": "Maxwell Wise", - "reportsTo": 17, - "phone": "(570) 494-2531", - "extension": 9865, - "hireDate": new Date(2012, 5, 19), - "fullTime": true, - "position": "Systems Engineer", - "timeInPosition": 0 - }] - }, { - "id": 20, - "name": "Hunter Mcbride", - "reportsTo": 15, - "phone": "(409) 442-7016", - "extension": 4284, - "hireDate": new Date(2012, 10, 20), - "fullTime": true, - "position": "Senior Director, Tax", - "timeInPosition": 3 - }, { - "id": 21, - "name": "Jana Serrano", - "reportsTo": 15, - "phone": "(910) 718-4620", - "extension": 6970, - "hireDate": new Date(2010, 4, 2), - "fullTime": true, - "position": "Financial Planning & Analysis Manager", - "timeInPosition": 2 - }, { - "id": 22, - "name": "Zachery Shelton", - "reportsTo": 15, - "phone": "(310) 240-8675", - "extension": 4527, - "hireDate": new Date(2011, 11, 23), - "fullTime": false, - "position": "Corporate Finance Controller", - "timeInPosition": 6, - "employees": [{ - "id": 28, - "name": "Cullen Freeman", - "reportsTo": 22, - "phone": "(136) 554-8814", - "extension": 9861, - "hireDate": new Date(2014, 3, 15), - "fullTime": true, - "position": "Treasurer Accountant", - "timeInPosition": 2 - }, { - "id": 31, - "name": "Quinn Dean", - "reportsTo": 22, - "phone": "(152) 613-3507", - "extension": 6621, - "hireDate": new Date(2015, 1, 29), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 6 - }, { - "id": 34, - "name": "Samantha Brady", - "reportsTo": 22, - "phone": "(206) 398-4328", - "extension": 1157, - "hireDate": new Date(2011, 2, 13), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 2, - "employees": [{ - "id": 35, - "name": "Tamara Green", - "reportsTo": 34, - "phone": "(219) 248-2789", - "extension": 4880, - "hireDate": new Date(2014, 2, 4), - "fullTime": true, - "position": "Junior Accountant", - "timeInPosition": 6 - }] - }, { - "id": 36, - "name": "Olympia Coleman", - "reportsTo": 22, - "phone": "(944) 853-6383", - "extension": 2136, - "hireDate": new Date(2013, 7, 31), - "fullTime": true, - "position": "Collections Manager", - "timeInPosition": 3 - }, { - "id": 37, - "name": "Breanna Goodwin", - "reportsTo": 22, - "phone": "(379) 988-9630", - "extension": 5898, - "hireDate": new Date(2010, 5, 23), - "fullTime": false, - "position": "Payroll Specialist", - "timeInPosition": 4 - }] - }, { - "id": 27, - "name": "Curran Travis", - "reportsTo": 15, - "phone": "(438) 135-8033", - "extension": 3841, - "hireDate": new Date(2011, 6, 13), - "fullTime": true, - "position": "Finance Controller", - "timeInPosition": 5 - }] - }] - }, { - "id": 8, - "name": "Hunter Fry", - "reportsTo": 1, - "phone": "(766) 358-9858", - "extension": 3741, - "hireDate": new Date(2011, 2, 12), - "fullTime": false, - "position": "General Counsel", - "timeInPosition": 3, - "employees": [{ - "id": 9, - "name": "Kuame Carrillo", - "reportsTo": 8, - "phone": "(192) 383-1305", - "extension": 9228, - "hireDate": new Date(2011, 2, 22), - "fullTime": true, - "position": "Associate General Councel", - "timeInPosition": 0 - }, { - "id": 13, - "name": "Stacy Todd", - "reportsTo": 8, - "phone": "(925) 286-3327", - "extension": 8565, - "hireDate": new Date(2014, 7, 5), - "fullTime": true, - "position": "Councel", - "timeInPosition": 0 - }, { - "id": 33, - "name": "Valentine Wyatt", - "reportsTo": 8, - "phone": "(165) 166-6205", - "extension": 3588, - "hireDate": new Date(2015, 5, 21), - "fullTime": true, - "position": "Councel", - "timeInPosition": 5 - }, { - "id": 86, - "name": "Daniel Mccarthy", - "reportsTo": 8, - "phone": "(624) 483-6206", - "extension": 9112, - "hireDate": new Date(2013, 12, 3), - "fullTime": false, - "position": "Staff Attorney", - "timeInPosition": 0 - }] - }] - }]; - export default employees; \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/main.jsx b/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/my-command-cell.jsx b/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/my-command-cell.jsx deleted file mode 100644 index 20bd538e..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-focus-input-on-edit/my-command-cell.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -export default function MyCommandCell(enterEdit, remove, save, cancel, addChild, editField) { - return class extends React.Component { - render() { - const { - dataItem - } = this.props; - return dataItem[editField] ? - - - : - - - - ; - } - - }; -} \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/app.jsx b/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/app.jsx deleted file mode 100644 index c2db9d78..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/app.jsx +++ /dev/null @@ -1,212 +0,0 @@ -import * as React from 'react'; -import { - TreeList, - TreeListToolbar, - mapTree, - extendDataItem, - removeItems, - modifySubItems, - TreeListTextEditor, - //TreeListBooleanEditor, -} from '@progress/kendo-react-treelist'; -import { Input } from '@progress/kendo-react-inputs'; -import { Error } from '@progress/kendo-react-labels'; -import MyCommandCell from './my-command-cell'; -import employees from './data'; -const subItemsField = 'employees'; -const expandField = 'expanded'; -const editField = 'inEdit'; - -const App = () => { - const [state, setState] = React.useState({ - data: employees.slice(), - expanded: [1, 2, 32], - inEdit: [], - }); - - const [isValid, setIsValid] = React.useState(true); - - const MyCell = React.useCallback((props) => { - console.log(props); - let isValid = true; - if (props.dataItem[props.field]) { - if (props.dataItem[props.field].length <= 4) { - isValid = false; - setIsValid(false); - } else { - setIsValid(true); - } - } else { - isValid = false; - setIsValid(false); - } - - const handleOnChange = (e) => { - props.onChange({ - dataItem: props.dataItem, - field: props.field, - syntheticEvent: e.syntheticEvent, - value: e.value, - }); - }; - return ( - - - {!isValid && This is not valid} - - ); - }, []); - - const addChild = (dataItem) => { - const newRecord = createNewItem(); - setState({ - ...state, - inEdit: [...state.inEdit, newRecord], - expanded: [...state.expanded, dataItem.id], - data: modifySubItems( - state.data, - subItemsField, - (item) => item.id === dataItem.id, - (subItems) => [newRecord, ...subItems] - ), - }); - }; - const enterEdit = (dataItem) => { - setState({ - ...state, - inEdit: [...state.inEdit, extendDataItem(dataItem, subItemsField)], - }); - }; - const save = (dataItem) => { - const { isNew, inEdit, ...itemToSave } = dataItem; - isValid && - setState({ - ...state, - data: mapTree(state.data, subItemsField, (item) => - item.id === itemToSave.id ? itemToSave : item - ), - inEdit: state.inEdit.filter((i) => i.id !== itemToSave.id), - }); - }; - const cancel = (editedItem) => { - const { inEdit, data } = state; - if (editedItem.isNew) { - return remove(editedItem); - } - setState({ - ...state, - data: mapTree(data, subItemsField, (item) => - item.id === editedItem.id ? inEdit.find((i) => i.id === item.id) : item - ), - inEdit: inEdit.filter((i) => i.id !== editedItem.id), - }); - }; - const remove = (dataItem) => { - setState({ - ...state, - data: removeItems(state.data, subItemsField, (i) => i.id === dataItem.id), - inEdit: state.inEdit.filter((i) => i.id !== dataItem.id), - }); - }; - const onExpandChange = (e) => { - setState({ - ...state, - expanded: e.value - ? state.expanded.filter((id) => id !== e.dataItem.id) - : [...state.expanded, e.dataItem.id], - }); - }; - const onItemChange = (event) => { - const field = event.field; - setState({ - ...state, - data: mapTree(state.data, subItemsField, (item) => - item.id === event.dataItem.id - ? extendDataItem(item, subItemsField, { - [field]: event.value, - }) - : item - ), - }); - }; - const addRecord = () => { - const newRecord = createNewItem(); - setState({ - ...state, - data: [newRecord, ...state.data], - inEdit: [ - ...state.inEdit, - { - ...newRecord, - }, - ], - }); - }; - const createNewItem = () => { - const timestamp = new Date().getTime(); - return { - id: timestamp, - isNew: true, - }; - }; - const CommandCell = MyCommandCell( - enterEdit, - remove, - save, - cancel, - addChild, - editField - ); - const columns = [ - { - field: 'name', - title: 'Name', - width: '280px', - editCell: MyCell, - expandable: true, - }, - { - cell: CommandCell, - width: '360px', - }, - ]; - const { data, expanded, inEdit } = state; - return ( - - extendDataItem(item, subItemsField, { - [expandField]: expanded.includes(item.id), - [editField]: Boolean(inEdit.find((i) => i.id === item.id)), - }) - )} - editField={editField} - expandField={expandField} - subItemsField={subItemsField} - onItemChange={onItemChange} - onExpandChange={onExpandChange} - columns={columns} - toolbar={ - - - - } - /> - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/data.js b/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/data.js deleted file mode 100644 index 2c97886e..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/data.js +++ /dev/null @@ -1,1149 +0,0 @@ -const employees = [ - { - id: 1, - name: 'Daryl Sweeney', - reportsTo: null, - phone: '(555) 924-9726', - extension: 8253, - hireDate: new Date(2012, 2, 7), - fullTime: true, - position: 'CEO', - timeInPosition: 2, - employees: [ - { - id: 2, - name: 'Guy Wooten', - reportsTo: 1, - phone: '(438) 738-4935', - extension: 1155, - hireDate: new Date(2010, 3, 3), - fullTime: true, - position: 'Chief Technical Officer', - timeInPosition: 1, - employees: [ - { - id: 32, - name: 'Buffy Weber', - reportsTo: 2, - phone: '(699) 838-6121', - extension: 8933, - hireDate: new Date(2011, 7, 11), - fullTime: true, - position: 'VP, Engineering', - timeInPosition: 2, - employees: [ - { - id: 11, - name: 'Hyacinth Hood', - reportsTo: 32, - phone: '(889) 345-2438', - extension: 8564, - hireDate: new Date(2014, 2, 3), - fullTime: true, - position: 'Team Lead', - timeInPosition: 1, - employees: [ - { - id: 60, - name: 'Akeem Carr', - reportsTo: 11, - phone: '(738) 136-2814', - extension: 9353, - hireDate: new Date(2011, 4, 21), - fullTime: true, - position: 'Junior Software Developer', - timeInPosition: 2, - }, - { - id: 78, - name: 'Rinah Simon', - reportsTo: 11, - phone: '(285) 912-5271', - extension: 7795, - hireDate: new Date(2012, 10, 11), - fullTime: true, - position: 'Software Developer', - timeInPosition: 4, - }, - ], - }, - { - id: 42, - name: 'Gage Daniels', - reportsTo: 32, - phone: '(107) 290-6260', - extension: 896, - hireDate: new Date(2013, 5, 16), - fullTime: true, - position: 'Software Architect', - timeInPosition: 5, - }, - { - id: 43, - name: 'Constance Vazquez', - reportsTo: 32, - phone: '(800) 301-1978', - extension: 5141, - hireDate: new Date(2011, 6, 7), - fullTime: true, - position: 'Director, Engineering', - timeInPosition: 1, - employees: [ - { - id: 46, - name: 'Darrel Solis', - reportsTo: 43, - phone: '(327) 977-0216', - extension: 7779, - hireDate: new Date(2015, 4, 25), - fullTime: true, - position: 'Team Lead', - timeInPosition: 4, - employees: [ - { - id: 47, - name: 'Brian Yang', - reportsTo: 46, - phone: '(565) 146-5435', - extension: 3885, - hireDate: new Date(2012, 9, 27), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 3, - }, - { - id: 50, - name: 'Lillian Bradshaw', - reportsTo: 46, - phone: '(323) 509-3479', - extension: 5426, - hireDate: new Date(2014, 5, 10), - fullTime: true, - position: 'Software Developer', - timeInPosition: 2, - }, - { - id: 51, - name: 'Christian Palmer', - reportsTo: 46, - phone: '(490) 421-8718', - extension: 3706, - hireDate: new Date(2012, 12, 27), - fullTime: false, - position: 'Technical Lead', - timeInPosition: 1, - }, - { - id: 55, - name: 'Summer Mosley', - reportsTo: 46, - phone: '(784) 962-2301', - extension: 5492, - hireDate: new Date(2010, 3, 2), - fullTime: true, - position: 'QA Engineer', - timeInPosition: 5, - }, - { - id: 56, - name: 'Barry Ayers', - reportsTo: 46, - phone: '(452) 373-9227', - extension: 1308, - hireDate: new Date(2011, 10, 11), - fullTime: true, - position: 'Software Developer', - timeInPosition: 4, - }, - { - id: 59, - name: 'Keiko Espinoza', - reportsTo: 46, - phone: '(226) 600-5305', - extension: 9363, - hireDate: new Date(2011, 9, 18), - fullTime: true, - position: 'Junior QA Engineer', - timeInPosition: 4, - }, - { - id: 61, - name: 'Candace Pickett', - reportsTo: 46, - phone: '(120) 117-7475', - extension: 5178, - hireDate: new Date(2010, 5, 6), - fullTime: true, - position: 'Support Officer', - timeInPosition: 0, - }, - ], - }, - { - id: 63, - name: 'Mia Caldwell', - reportsTo: 43, - phone: '(848) 636-6470', - extension: 6368, - hireDate: new Date(2012, 10, 7), - fullTime: true, - position: 'Team Lead', - timeInPosition: 4, - employees: [ - { - id: 65, - name: 'Thomas Terry', - reportsTo: 63, - phone: '(764) 831-4248', - extension: 3574, - hireDate: new Date(2015, 6, 15), - fullTime: false, - position: 'Senior Enterprise Support Officer', - timeInPosition: 2, - }, - { - id: 67, - name: 'Ruth Downs', - reportsTo: 63, - phone: '(138) 991-1440', - extension: 8067, - hireDate: new Date(2013, 7, 13), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 5, - }, - { - id: 70, - name: 'Yasir Wilder', - reportsTo: 63, - phone: '(759) 701-8665', - extension: 8350, - hireDate: new Date(2010, 11, 8), - fullTime: true, - position: 'Senior QA Enginner', - timeInPosition: 3, - }, - { - id: 71, - name: 'Flavia Short', - reportsTo: 63, - phone: '(370) 133-9238', - extension: 6390, - hireDate: new Date(2013, 2, 21), - fullTime: true, - position: 'Support Officer', - timeInPosition: 0, - }, - { - id: 74, - name: 'Aaron Roach', - reportsTo: 63, - phone: '(958) 717-9230', - extension: 4899, - hireDate: new Date(2011, 7, 30), - fullTime: true, - position: 'Junior Software Developer', - timeInPosition: 6, - }, - { - id: 75, - name: 'Eric Russell', - reportsTo: 63, - phone: '(516) 575-8505', - extension: 2224, - hireDate: new Date(2012, 10, 28), - fullTime: true, - position: 'Software Developer', - timeInPosition: 3, - }, - { - id: 76, - name: 'Cheyenne Olson', - reportsTo: 63, - phone: '(241) 645-0257', - extension: 9181, - hireDate: new Date(2015, 5, 19), - fullTime: true, - position: 'Software Developer', - timeInPosition: 5, - }, - { - id: 77, - name: 'Shaine Avila', - reportsTo: 63, - phone: '(844) 435-1360', - extension: 3374, - hireDate: new Date(2010, 1, 31), - fullTime: true, - position: 'UI Designer', - timeInPosition: 5, - }, - { - id: 81, - name: 'Chantale Long', - reportsTo: 63, - phone: '(252) 419-6891', - extension: 7868, - hireDate: new Date(2010, 6, 17), - fullTime: true, - position: 'Senior QA Enginner', - timeInPosition: 1, - }, - { - id: 83, - name: 'Dane Cruz', - reportsTo: 63, - phone: '(946) 701-6165', - extension: 3828, - hireDate: new Date(2014, 10, 8), - fullTime: true, - position: 'Junior Software Developer', - timeInPosition: 2, - }, - { - id: 84, - name: 'Regan Patterson', - reportsTo: 63, - phone: '(265) 946-1765', - extension: 6955, - hireDate: new Date(2012, 3, 1), - fullTime: true, - position: 'Technical Writer', - timeInPosition: 6, - }, - { - id: 85, - name: 'Drew Mckay', - reportsTo: 63, - phone: '(327) 293-0162', - extension: 6904, - hireDate: new Date(2011, 3, 25), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 3, - }, - { - id: 88, - name: 'Bevis Miller', - reportsTo: 63, - phone: '(525) 557-0169', - extension: 6978, - hireDate: new Date(2011, 4, 19), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 5, - }, - { - id: 89, - name: 'Bruce Mccarty', - reportsTo: 63, - phone: '(936) 777-8730', - extension: 6552, - hireDate: new Date(2014, 3, 28), - fullTime: true, - position: 'Support Officer', - timeInPosition: 5, - }, - ], - }, - { - id: 90, - name: 'Ocean Blair', - reportsTo: 43, - phone: '(343) 586-6614', - extension: 1424, - hireDate: new Date(2011, 4, 27), - fullTime: true, - position: 'Team Lead', - timeInPosition: 2, - employees: [ - { - id: 91, - name: 'Guinevere Osborn', - reportsTo: 90, - phone: '(424) 741-0006', - extension: 3166, - hireDate: new Date(2014, 11, 19), - fullTime: true, - position: 'Software Developer', - timeInPosition: 3, - }, - { - id: 92, - name: 'Olga Strong', - reportsTo: 90, - phone: '(949) 417-1168', - extension: 4568, - hireDate: new Date(2015, 5, 28), - fullTime: true, - position: 'Graphic Designer', - timeInPosition: 4, - }, - { - id: 93, - name: 'Robert Orr', - reportsTo: 90, - phone: '(977) 341-3721', - extension: 9241, - hireDate: new Date(2012, 8, 20), - fullTime: false, - position: 'Support Officer', - timeInPosition: 6, - }, - { - id: 95, - name: 'Odette Sears', - reportsTo: 90, - phone: '(264) 818-6576', - extension: 1914, - hireDate: new Date(2013, 7, 5), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 3, - }, - ], - }, - ], - }, - { - id: 45, - name: 'Zelda Medina', - reportsTo: 32, - phone: '(563) 359-6023', - extension: 2600, - hireDate: new Date(2012, 11, 6), - fullTime: true, - position: 'QA Architect', - timeInPosition: 2, - }, - ], - }, - { - id: 52, - name: 'Skyler Cleveland', - reportsTo: 2, - phone: '(217) 280-5300', - extension: 9655, - hireDate: new Date(2014, 11, 10), - fullTime: true, - position: 'VP, Engineering', - timeInPosition: 2, - employees: [ - { - id: 40, - name: 'Karleigh Garza', - reportsTo: 52, - phone: '(370) 983-8796', - extension: 4044, - hireDate: new Date(2014, 3, 10), - fullTime: true, - position: 'Team Lead', - timeInPosition: 1, - employees: [ - { - id: 49, - name: 'Elmo Tyson', - reportsTo: 40, - phone: '(344) 496-9555', - extension: 6950, - hireDate: new Date(2014, 9, 18), - fullTime: true, - position: 'Software Developer', - timeInPosition: 4, - }, - { - id: 72, - name: 'Stacey Lynn', - reportsTo: 40, - phone: '(140) 772-7509', - extension: 8396, - hireDate: new Date(2014, 7, 31), - fullTime: false, - position: 'QA Engineer', - timeInPosition: 1, - employees: [ - { - id: 80, - name: 'Meredith Parrish', - reportsTo: 72, - phone: '(714) 284-2408', - extension: 7675, - hireDate: new Date(2012, 11, 13), - fullTime: true, - position: 'Junior QA Engineer', - timeInPosition: 6, - }, - ], - }, - { - id: 96, - name: 'Cassady Whitley', - reportsTo: 40, - phone: '(996) 587-8405', - extension: 780, - hireDate: new Date(2013, 5, 7), - fullTime: true, - position: 'Software Developer', - timeInPosition: 5, - }, - { - id: 97, - name: 'Haviva Campbell', - reportsTo: 40, - phone: '(263) 887-4689', - extension: 2808, - hireDate: new Date(2013, 3, 5), - fullTime: true, - position: 'Support Officer', - timeInPosition: 2, - }, - { - id: 98, - name: 'Cameron Ayers', - reportsTo: 40, - phone: '(470) 709-8030', - extension: 2893, - hireDate: new Date(2013, 8, 28), - fullTime: true, - position: 'Support Officer', - timeInPosition: 3, - }, - { - id: 99, - name: 'Martha Sargent', - reportsTo: 40, - phone: '(587) 812-4418', - extension: 5099, - hireDate: new Date(2014, 2, 27), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 3, - }, - { - id: 100, - name: 'Darrel Kinney', - reportsTo: 40, - phone: '(888) 483-9606', - extension: 4779, - hireDate: new Date(2014, 3, 24), - fullTime: false, - position: 'Graphic Designer', - timeInPosition: 1, - }, - ], - }, - { - id: 54, - name: 'Kuame Frye', - reportsTo: 52, - phone: '(360) 721-5886', - extension: 2730, - hireDate: new Date(2010, 11, 17), - fullTime: true, - position: 'Software Architect', - timeInPosition: 1, - employees: [ - { - id: 64, - name: 'Ori Wynn', - reportsTo: 54, - phone: '(366) 342-0166', - extension: 7252, - hireDate: new Date(2015, 6, 21), - fullTime: true, - position: 'Team Lead', - timeInPosition: 0, - employees: [ - { - id: 6, - name: 'Moses Duncan', - reportsTo: 64, - phone: '(421) 611-4814', - extension: 669, - hireDate: new Date(2010, 5, 24), - fullTime: true, - position: 'Software Developer', - timeInPosition: 6, - }, - { - id: 12, - name: 'Jamalia Wallace', - reportsTo: 64, - phone: '(611) 391-8016', - extension: 1952, - hireDate: new Date(2011, 9, 8), - fullTime: true, - position: 'Junior Designer', - timeInPosition: 3, - }, - { - id: 62, - name: 'Palmer Gregory', - reportsTo: 64, - phone: '(360) 430-2505', - extension: 4337, - hireDate: new Date(2014, 8, 30), - fullTime: true, - position: 'Designer', - timeInPosition: 4, - }, - { - id: 68, - name: 'Mallory Gilliam', - reportsTo: 64, - phone: '(878) 423-2971', - extension: 1341, - hireDate: new Date(2014, 7, 24), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 1, - }, - { - id: 73, - name: 'Ima Hughes', - reportsTo: 64, - phone: '(905) 485-8001', - extension: 1273, - hireDate: new Date(2013, 6, 3), - fullTime: true, - position: 'Software Developer', - timeInPosition: 0, - }, - { - id: 79, - name: 'Duncan Mathews', - reportsTo: 64, - phone: '(790) 971-9709', - extension: 4573, - hireDate: new Date(2011, 8, 21), - fullTime: false, - position: 'Software Developer', - timeInPosition: 3, - }, - ], - }, - ], - }, - { - id: 69, - name: 'Sierra Beasley', - reportsTo: 52, - phone: '(271) 953-1968', - extension: 3324, - hireDate: new Date(2011, 4, 2), - fullTime: true, - position: 'Team Lead', - timeInPosition: 3, - employees: [ - { - id: 38, - name: 'Elton Tucker', - reportsTo: 69, - phone: '(988) 930-9331', - extension: 9216, - hireDate: new Date(2015, 6, 4), - fullTime: true, - position: 'Support Officer', - timeInPosition: 1, - }, - { - id: 39, - name: 'Iona Brennan', - reportsTo: 69, - phone: '(356) 563-0600', - extension: 5634, - hireDate: new Date(2010, 9, 23), - fullTime: true, - position: 'Junior Support Officer', - timeInPosition: 4, - }, - { - id: 53, - name: 'Paul Campos', - reportsTo: 69, - phone: '(899) 205-1689', - extension: 8586, - hireDate: new Date(2011, 3, 17), - fullTime: true, - position: 'Interaction Designer', - timeInPosition: 4, - employees: [ - { - id: 66, - name: 'Gloria Freeman', - reportsTo: 53, - phone: '(344) 950-9168', - extension: 4738, - hireDate: new Date(2013, 5, 6), - fullTime: true, - position: 'Junior Interaction Designer', - timeInPosition: 0, - }, - ], - }, - { - id: 57, - name: 'Alyssa Hansen', - reportsTo: 69, - phone: '(548) 925-4799', - extension: 4716, - hireDate: new Date(2011, 1, 19), - fullTime: true, - position: 'Junior Software Developer', - timeInPosition: 6, - }, - { - id: 82, - name: 'Yael Walters', - reportsTo: 69, - phone: '(311) 489-8191', - extension: 6520, - hireDate: new Date(2013, 7, 4), - fullTime: true, - position: 'Software Developer', - timeInPosition: 6, - }, - { - id: 87, - name: 'Dahlia Hunt', - reportsTo: 69, - phone: '(720) 339-5202', - extension: 3690, - hireDate: new Date(2011, 3, 26), - fullTime: true, - position: 'Senior Software Developer', - timeInPosition: 4, - }, - { - id: 94, - name: 'Adria Stanley', - reportsTo: 69, - phone: '(536) 357-6391', - extension: 3374, - hireDate: new Date(2014, 7, 26), - fullTime: true, - position: 'Software Developer', - timeInPosition: 0, - }, - ], - }, - ], - }, - ], - }, - { - id: 3, - name: 'Priscilla Frank', - reportsTo: 1, - phone: '(278) 927-2684', - extension: 4183, - hireDate: new Date(2014, 11, 30), - fullTime: true, - position: 'Chief Product Officer', - timeInPosition: 2, - employees: [ - { - id: 4, - name: 'Ursula Holmes', - reportsTo: 3, - phone: '(302) 760-2034', - extension: 2226, - hireDate: new Date(2011, 6, 6), - fullTime: true, - position: 'EVP, Product Strategy', - timeInPosition: 4, - }, - { - id: 24, - name: 'Melvin Carrillo', - reportsTo: 3, - phone: '(348) 933-5167', - extension: 2482, - hireDate: new Date(2014, 7, 21), - fullTime: true, - position: 'Director, Developer Relations', - timeInPosition: 6, - employees: [ - { - id: 29, - name: 'Martha Chavez', - reportsTo: 24, - phone: '(860) 754-3464', - extension: 4531, - hireDate: new Date(2013, 3, 12), - fullTime: true, - position: 'Developer Advocate', - timeInPosition: 0, - }, - { - id: 30, - name: 'Oren Fox', - reportsTo: 24, - phone: '(572) 414-3299', - extension: 4849, - hireDate: new Date(2013, 5, 14), - fullTime: false, - position: 'Developer Advocate', - timeInPosition: 0, - }, - { - id: 41, - name: 'Amos Barr', - reportsTo: 24, - phone: '(470) 381-3718', - extension: 7643, - hireDate: new Date(2010, 3, 9), - fullTime: true, - position: 'Developer Advocate', - timeInPosition: 2, - }, - ], - }, - ], - }, - { - id: 5, - name: 'Anika Vega', - reportsTo: 1, - phone: '(910) 714-1802', - extension: 6353, - hireDate: new Date(2010, 2, 25), - fullTime: true, - position: 'Chief Process Officer', - timeInPosition: 5, - employees: [ - { - id: 10, - name: 'Vernon Ballard', - reportsTo: 5, - phone: '(702) 185-8890', - extension: 9242, - hireDate: new Date(2015, 6, 26), - fullTime: true, - position: 'Director Facilities', - timeInPosition: 2, - employees: [ - { - id: 16, - name: 'Ali Guy', - reportsTo: 10, - phone: '(429) 912-6578', - extension: 2225, - hireDate: new Date(2014, 6, 29), - fullTime: true, - position: 'Operations Manager', - timeInPosition: 4, - employees: [ - { - id: 23, - name: 'Bruce Reilly', - reportsTo: 16, - phone: '(995) 243-7302', - extension: 4815, - hireDate: new Date(2015, 4, 1), - fullTime: true, - position: 'Head of Security', - timeInPosition: 1, - employees: [ - { - id: 26, - name: 'Rowan Morin', - reportsTo: 23, - phone: '(792) 141-4374', - extension: 1844, - hireDate: new Date(2015, 7, 30), - fullTime: true, - position: 'Building Security', - timeInPosition: 5, - }, - { - id: 44, - name: 'Benedict Soto', - reportsTo: 23, - phone: '(822) 282-5991', - extension: 6422, - hireDate: new Date(2012, 6, 1), - fullTime: false, - position: 'Building Security', - timeInPosition: 4, - }, - ], - }, - { - id: 48, - name: 'Maryam Rios', - reportsTo: 16, - phone: '(673) 764-6720', - extension: 531, - hireDate: new Date(2014, 3, 3), - fullTime: true, - position: 'Team Lead, Personal Assistants', - timeInPosition: 1, - employees: [ - { - id: 58, - name: 'Rose Mcintyre', - reportsTo: 48, - phone: '(771) 615-4590', - extension: 7094, - hireDate: new Date(2015, 6, 30), - fullTime: false, - position: 'Personal Assistant', - timeInPosition: 6, - }, - ], - }, - ], - }, - ], - }, - ], - }, - { - id: 7, - name: 'Nevada Hart', - reportsTo: 1, - phone: '(254) 220-1576', - extension: 6649, - hireDate: new Date(2015, 8, 17), - fullTime: true, - position: 'Chief Financial Officer', - timeInPosition: 6, - employees: [ - { - id: 14, - name: 'Zena Sanford', - reportsTo: 7, - phone: '(437) 568-8160', - extension: 4452, - hireDate: new Date(2010, 11, 30), - fullTime: true, - position: 'VP, Finance', - timeInPosition: 4, - }, - { - id: 15, - name: 'Quinlan Howe', - reportsTo: 7, - phone: '(464) 334-9748', - extension: 8722, - hireDate: new Date(2011, 6, 9), - fullTime: false, - position: 'Senior Director, Finance', - timeInPosition: 0, - employees: [ - { - id: 17, - name: 'Indira Lopez', - reportsTo: 15, - phone: '(301) 368-0938', - extension: 8027, - hireDate: new Date(2013, 8, 18), - fullTime: true, - position: 'ERP Team Lead', - timeInPosition: 4, - employees: [ - { - id: 18, - name: 'Lareina Lara', - reportsTo: 17, - phone: '(233) 457-7482', - extension: 1996, - hireDate: new Date(2010, 4, 30), - fullTime: true, - position: 'ERP Solutions Consultant', - timeInPosition: 6, - }, - { - id: 19, - name: 'Maxwell Wise', - reportsTo: 17, - phone: '(570) 494-2531', - extension: 9865, - hireDate: new Date(2012, 5, 19), - fullTime: true, - position: 'Systems Engineer', - timeInPosition: 0, - }, - ], - }, - { - id: 20, - name: 'Hunter Mcbride', - reportsTo: 15, - phone: '(409) 442-7016', - extension: 4284, - hireDate: new Date(2012, 10, 20), - fullTime: true, - position: 'Senior Director, Tax', - timeInPosition: 3, - }, - { - id: 21, - name: 'Jana Serrano', - reportsTo: 15, - phone: '(910) 718-4620', - extension: 6970, - hireDate: new Date(2010, 4, 2), - fullTime: true, - position: 'Financial Planning & Analysis Manager', - timeInPosition: 2, - }, - { - id: 22, - name: 'Zachery Shelton', - reportsTo: 15, - phone: '(310) 240-8675', - extension: 4527, - hireDate: new Date(2011, 11, 23), - fullTime: false, - position: 'Corporate Finance Controller', - timeInPosition: 6, - employees: [ - { - id: 28, - name: 'Cullen Freeman', - reportsTo: 22, - phone: '(136) 554-8814', - extension: 9861, - hireDate: new Date(2014, 3, 15), - fullTime: true, - position: 'Treasurer Accountant', - timeInPosition: 2, - }, - { - id: 31, - name: 'Quinn Dean', - reportsTo: 22, - phone: '(152) 613-3507', - extension: 6621, - hireDate: new Date(2015, 1, 29), - fullTime: true, - position: 'Accountant', - timeInPosition: 6, - }, - { - id: 34, - name: 'Samantha Brady', - reportsTo: 22, - phone: '(206) 398-4328', - extension: 1157, - hireDate: new Date(2011, 2, 13), - fullTime: true, - position: 'Accountant', - timeInPosition: 2, - employees: [ - { - id: 35, - name: 'Tamara Green', - reportsTo: 34, - phone: '(219) 248-2789', - extension: 4880, - hireDate: new Date(2014, 2, 4), - fullTime: true, - position: 'Junior Accountant', - timeInPosition: 6, - }, - ], - }, - { - id: 36, - name: 'Olympia Coleman', - reportsTo: 22, - phone: '(944) 853-6383', - extension: 2136, - hireDate: new Date(2013, 7, 31), - fullTime: true, - position: 'Collections Manager', - timeInPosition: 3, - }, - { - id: 37, - name: 'Breanna Goodwin', - reportsTo: 22, - phone: '(379) 988-9630', - extension: 5898, - hireDate: new Date(2010, 5, 23), - fullTime: false, - position: 'Payroll Specialist', - timeInPosition: 4, - }, - ], - }, - { - id: 27, - name: 'Curran Travis', - reportsTo: 15, - phone: '(438) 135-8033', - extension: 3841, - hireDate: new Date(2011, 6, 13), - fullTime: true, - position: 'Finance Controller', - timeInPosition: 5, - }, - ], - }, - ], - }, - { - id: 8, - name: 'Hunter Fry', - reportsTo: 1, - phone: '(766) 358-9858', - extension: 3741, - hireDate: new Date(2011, 2, 12), - fullTime: false, - position: 'General Counsel', - timeInPosition: 3, - employees: [ - { - id: 9, - name: 'Kuame Carrillo', - reportsTo: 8, - phone: '(192) 383-1305', - extension: 9228, - hireDate: new Date(2011, 2, 22), - fullTime: true, - position: 'Associate General Councel', - timeInPosition: 0, - }, - { - id: 13, - name: 'Stacy Todd', - reportsTo: 8, - phone: '(925) 286-3327', - extension: 8565, - hireDate: new Date(2014, 7, 5), - fullTime: true, - position: 'Councel', - timeInPosition: 0, - }, - { - id: 33, - name: 'Valentine Wyatt', - reportsTo: 8, - phone: '(165) 166-6205', - extension: 3588, - hireDate: new Date(2015, 5, 21), - fullTime: true, - position: 'Councel', - timeInPosition: 5, - }, - { - id: 86, - name: 'Daniel Mccarthy', - reportsTo: 8, - phone: '(624) 483-6206', - extension: 9112, - hireDate: new Date(2013, 12, 3), - fullTime: false, - position: 'Staff Attorney', - timeInPosition: 0, - }, - ], - }, - ], - }, - ]; - export default employees; - \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/main.jsx b/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/my-command-cell.jsx b/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/my-command-cell.jsx deleted file mode 100644 index d56a3d82..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-inline-editing-validation/my-command-cell.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import * as React from 'react'; -export default function MyCommandCell( - enterEdit, - remove, - save, - cancel, - addChild, - editField -) { - // eslint-disable-next-line react/display-name - return class extends React.Component { - render() { - const { dataItem } = this.props; - return dataItem[editField] ? ( - - - - - ) : ( - - - - - - ); - } - }; -} diff --git a/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/app.jsx b/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/app.jsx deleted file mode 100644 index 80cb362c..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/app.jsx +++ /dev/null @@ -1,108 +0,0 @@ -import * as React from 'react'; -import { - TreeList, - mapTree, - extendDataItem, -} from '@progress/kendo-react-treelist'; -import employees from './data'; -const subItemsField = 'employees'; -const expandField = 'expanded'; -const columns = [ - { - field: 'name', - title: 'Name', - width: '310px', - expandable: true, - key: 1, - }, - { - field: 'position', - title: 'Position', - width: '260px', - locked: true, - key: 2, - }, - { - field: 'hireDate', - title: 'Hire Date', - width: '160px', - format: '{0:d}', - key: 3, - }, - { - field: 'timeInPosition', - title: 'Year(s) in Position', - width: '160px', - key: 4, - }, - { - field: 'fullTime', - title: 'Full Time', - width: '150px', - key: 5, - }, -]; - -const App = () => { - const [state, setState] = React.useState({ - expanded: [1, 2, 32], - columns, - }); - const table = React.useRef(); - - const onColumnResize = (event) => { - //setting the sum of all columns width to the table element - if (table) { - table.current.element.children[0].style.width = `${event.totalWidth}px`; - setState({ ...state, columns: event.columns }); - } - - if (event.end) { - setState({ ...state, columns: event.columns }); - } - }; - - const onExpandChange = (e) => { - setState({ - ...state, - expanded: e.value - ? state.expanded.filter((id) => id !== e.dataItem.id) - : [...state.expanded, e.dataItem.id], - }); - }; - - const addExpandField = (dataTree) => { - const expanded = state.expanded; - return mapTree(dataTree, subItemsField, (item) => - extendDataItem(item, subItemsField, { - [expandField]: expanded.includes(item.id), - }) - ); - }; - - return ( - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/data.js b/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/data.js deleted file mode 100644 index ab659696..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/data.js +++ /dev/null @@ -1,1020 +0,0 @@ -const employees = [{ - "id": 1, - "name": "Daryl Sweeney", - "reportsTo": null, - "phone": "(555) 924-9726", - "extension": 8253, - "hireDate": new Date(2012, 2, 7), - "fullTime": true, - "position": "CEO", - "timeInPosition": 2, - "employees": [{ - "id": 2, - "name": "Guy Wooten", - "reportsTo": 1, - "phone": "(438) 738-4935", - "extension": 1155, - "hireDate": new Date(2010, 3, 3), - "fullTime": true, - "position": "Chief Technical Officer", - "timeInPosition": 1, - "employees": [{ - "id": 32, - "name": "Buffy Weber", - "reportsTo": 2, - "phone": "(699) 838-6121", - "extension": 8933, - "hireDate": new Date(2011, 7, 11), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 11, - "name": "Hyacinth Hood", - "reportsTo": 32, - "phone": "(889) 345-2438", - "extension": 8564, - "hireDate": new Date(2014, 2, 3), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 60, - "name": "Akeem Carr", - "reportsTo": 11, - "phone": "(738) 136-2814", - "extension": 9353, - "hireDate": new Date(2011, 4, 21), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 78, - "name": "Rinah Simon", - "reportsTo": 11, - "phone": "(285) 912-5271", - "extension": 7795, - "hireDate": new Date(2012, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }] - }, { - "id": 42, - "name": "Gage Daniels", - "reportsTo": 32, - "phone": "(107) 290-6260", - "extension": 896, - "hireDate": new Date(2013, 5, 16), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 5 - }, { - "id": 43, - "name": "Constance Vazquez", - "reportsTo": 32, - "phone": "(800) 301-1978", - "extension": 5141, - "hireDate": new Date(2011, 6, 7), - "fullTime": true, - "position": "Director, Engineering", - "timeInPosition": 1, - "employees": [{ - "id": 46, - "name": "Darrel Solis", - "reportsTo": 43, - "phone": "(327) 977-0216", - "extension": 7779, - "hireDate": new Date(2015, 4, 25), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 47, - "name": "Brian Yang", - "reportsTo": 46, - "phone": "(565) 146-5435", - "extension": 3885, - "hireDate": new Date(2012, 9, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 50, - "name": "Lillian Bradshaw", - "reportsTo": 46, - "phone": "(323) 509-3479", - "extension": 5426, - "hireDate": new Date(2014, 5, 10), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 2 - }, { - "id": 51, - "name": "Christian Palmer", - "reportsTo": 46, - "phone": "(490) 421-8718", - "extension": 3706, - "hireDate": new Date(2012, 12, 27), - "fullTime": false, - "position": "Technical Lead", - "timeInPosition": 1 - }, { - "id": 55, - "name": "Summer Mosley", - "reportsTo": 46, - "phone": "(784) 962-2301", - "extension": 5492, - "hireDate": new Date(2010, 3, 2), - "fullTime": true, - "position": "QA Engineer", - "timeInPosition": 5 - }, { - "id": 56, - "name": "Barry Ayers", - "reportsTo": 46, - "phone": "(452) 373-9227", - "extension": 1308, - "hireDate": new Date(2011, 10, 11), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 59, - "name": "Keiko Espinoza", - "reportsTo": 46, - "phone": "(226) 600-5305", - "extension": 9363, - "hireDate": new Date(2011, 9, 18), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 4 - }, { - "id": 61, - "name": "Candace Pickett", - "reportsTo": 46, - "phone": "(120) 117-7475", - "extension": 5178, - "hireDate": new Date(2010, 5, 6), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }] - }, { - "id": 63, - "name": "Mia Caldwell", - "reportsTo": 43, - "phone": "(848) 636-6470", - "extension": 6368, - "hireDate": new Date(2012, 10, 7), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 65, - "name": "Thomas Terry", - "reportsTo": 63, - "phone": "(764) 831-4248", - "extension": 3574, - "hireDate": new Date(2015, 6, 15), - "fullTime": false, - "position": "Senior Enterprise Support Officer", - "timeInPosition": 2 - }, { - "id": 67, - "name": "Ruth Downs", - "reportsTo": 63, - "phone": "(138) 991-1440", - "extension": 8067, - "hireDate": new Date(2013, 7, 13), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 70, - "name": "Yasir Wilder", - "reportsTo": 63, - "phone": "(759) 701-8665", - "extension": 8350, - "hireDate": new Date(2010, 11, 8), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 3 - }, { - "id": 71, - "name": "Flavia Short", - "reportsTo": 63, - "phone": "(370) 133-9238", - "extension": 6390, - "hireDate": new Date(2013, 2, 21), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 0 - }, { - "id": 74, - "name": "Aaron Roach", - "reportsTo": 63, - "phone": "(958) 717-9230", - "extension": 4899, - "hireDate": new Date(2011, 7, 30), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 75, - "name": "Eric Russell", - "reportsTo": 63, - "phone": "(516) 575-8505", - "extension": 2224, - "hireDate": new Date(2012, 10, 28), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 76, - "name": "Cheyenne Olson", - "reportsTo": 63, - "phone": "(241) 645-0257", - "extension": 9181, - "hireDate": new Date(2015, 5, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 77, - "name": "Shaine Avila", - "reportsTo": 63, - "phone": "(844) 435-1360", - "extension": 3374, - "hireDate": new Date(2010, 1, 31), - "fullTime": true, - "position": "UI Designer", - "timeInPosition": 5 - }, { - "id": 81, - "name": "Chantale Long", - "reportsTo": 63, - "phone": "(252) 419-6891", - "extension": 7868, - "hireDate": new Date(2010, 6, 17), - "fullTime": true, - "position": "Senior QA Enginner", - "timeInPosition": 1 - }, { - "id": 83, - "name": "Dane Cruz", - "reportsTo": 63, - "phone": "(946) 701-6165", - "extension": 3828, - "hireDate": new Date(2014, 10, 8), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 2 - }, { - "id": 84, - "name": "Regan Patterson", - "reportsTo": 63, - "phone": "(265) 946-1765", - "extension": 6955, - "hireDate": new Date(2012, 3, 1), - "fullTime": true, - "position": "Technical Writer", - "timeInPosition": 6 - }, { - "id": 85, - "name": "Drew Mckay", - "reportsTo": 63, - "phone": "(327) 293-0162", - "extension": 6904, - "hireDate": new Date(2011, 3, 25), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 88, - "name": "Bevis Miller", - "reportsTo": 63, - "phone": "(525) 557-0169", - "extension": 6978, - "hireDate": new Date(2011, 4, 19), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 5 - }, { - "id": 89, - "name": "Bruce Mccarty", - "reportsTo": 63, - "phone": "(936) 777-8730", - "extension": 6552, - "hireDate": new Date(2014, 3, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 5 - }] - }, { - "id": 90, - "name": "Ocean Blair", - "reportsTo": 43, - "phone": "(343) 586-6614", - "extension": 1424, - "hireDate": new Date(2011, 4, 27), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 2, - "employees": [{ - "id": 91, - "name": "Guinevere Osborn", - "reportsTo": 90, - "phone": "(424) 741-0006", - "extension": 3166, - "hireDate": new Date(2014, 11, 19), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 3 - }, { - "id": 92, - "name": "Olga Strong", - "reportsTo": 90, - "phone": "(949) 417-1168", - "extension": 4568, - "hireDate": new Date(2015, 5, 28), - "fullTime": true, - "position": "Graphic Designer", - "timeInPosition": 4 - }, { - "id": 93, - "name": "Robert Orr", - "reportsTo": 90, - "phone": "(977) 341-3721", - "extension": 9241, - "hireDate": new Date(2012, 8, 20), - "fullTime": false, - "position": "Support Officer", - "timeInPosition": 6 - }, { - "id": 95, - "name": "Odette Sears", - "reportsTo": 90, - "phone": "(264) 818-6576", - "extension": 1914, - "hireDate": new Date(2013, 7, 5), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 45, - "name": "Zelda Medina", - "reportsTo": 32, - "phone": "(563) 359-6023", - "extension": 2600, - "hireDate": new Date(2012, 11, 6), - "fullTime": true, - "position": "QA Architect", - "timeInPosition": 2 - }] - }, { - "id": 52, - "name": "Skyler Cleveland", - "reportsTo": 2, - "phone": "(217) 280-5300", - "extension": 9655, - "hireDate": new Date(2014, 11, 10), - "fullTime": true, - "position": "VP, Engineering", - "timeInPosition": 2, - "employees": [{ - "id": 40, - "name": "Karleigh Garza", - "reportsTo": 52, - "phone": "(370) 983-8796", - "extension": 4044, - "hireDate": new Date(2014, 3, 10), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 1, - "employees": [{ - "id": 49, - "name": "Elmo Tyson", - "reportsTo": 40, - "phone": "(344) 496-9555", - "extension": 6950, - "hireDate": new Date(2014, 9, 18), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 4 - }, { - "id": 72, - "name": "Stacey Lynn", - "reportsTo": 40, - "phone": "(140) 772-7509", - "extension": 8396, - "hireDate": new Date(2014, 7, 31), - "fullTime": false, - "position": "QA Engineer", - "timeInPosition": 1, - "employees": [{ - "id": 80, - "name": "Meredith Parrish", - "reportsTo": 72, - "phone": "(714) 284-2408", - "extension": 7675, - "hireDate": new Date(2012, 11, 13), - "fullTime": true, - "position": "Junior QA Engineer", - "timeInPosition": 6 - }] - }, { - "id": 96, - "name": "Cassady Whitley", - "reportsTo": 40, - "phone": "(996) 587-8405", - "extension": 780, - "hireDate": new Date(2013, 5, 7), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 5 - }, { - "id": 97, - "name": "Haviva Campbell", - "reportsTo": 40, - "phone": "(263) 887-4689", - "extension": 2808, - "hireDate": new Date(2013, 3, 5), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 2 - }, { - "id": 98, - "name": "Cameron Ayers", - "reportsTo": 40, - "phone": "(470) 709-8030", - "extension": 2893, - "hireDate": new Date(2013, 8, 28), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 3 - }, { - "id": 99, - "name": "Martha Sargent", - "reportsTo": 40, - "phone": "(587) 812-4418", - "extension": 5099, - "hireDate": new Date(2014, 2, 27), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 3 - }, { - "id": 100, - "name": "Darrel Kinney", - "reportsTo": 40, - "phone": "(888) 483-9606", - "extension": 4779, - "hireDate": new Date(2014, 3, 24), - "fullTime": false, - "position": "Graphic Designer", - "timeInPosition": 1 - }] - }, { - "id": 54, - "name": "Kuame Frye", - "reportsTo": 52, - "phone": "(360) 721-5886", - "extension": 2730, - "hireDate": new Date(2010, 11, 17), - "fullTime": true, - "position": "Software Architect", - "timeInPosition": 1, - "employees": [{ - "id": 64, - "name": "Ori Wynn", - "reportsTo": 54, - "phone": "(366) 342-0166", - "extension": 7252, - "hireDate": new Date(2015, 6, 21), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 0, - "employees": [{ - "id": 6, - "name": "Moses Duncan", - "reportsTo": 64, - "phone": "(421) 611-4814", - "extension": 669, - "hireDate": new Date(2010, 5, 24), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 12, - "name": "Jamalia Wallace", - "reportsTo": 64, - "phone": "(611) 391-8016", - "extension": 1952, - "hireDate": new Date(2011, 9, 8), - "fullTime": true, - "position": "Junior Designer", - "timeInPosition": 3 - }, { - "id": 62, - "name": "Palmer Gregory", - "reportsTo": 64, - "phone": "(360) 430-2505", - "extension": 4337, - "hireDate": new Date(2014, 8, 30), - "fullTime": true, - "position": "Designer", - "timeInPosition": 4 - }, { - "id": 68, - "name": "Mallory Gilliam", - "reportsTo": 64, - "phone": "(878) 423-2971", - "extension": 1341, - "hireDate": new Date(2014, 7, 24), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 1 - }, { - "id": 73, - "name": "Ima Hughes", - "reportsTo": 64, - "phone": "(905) 485-8001", - "extension": 1273, - "hireDate": new Date(2013, 6, 3), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }, { - "id": 79, - "name": "Duncan Mathews", - "reportsTo": 64, - "phone": "(790) 971-9709", - "extension": 4573, - "hireDate": new Date(2011, 8, 21), - "fullTime": false, - "position": "Software Developer", - "timeInPosition": 3 - }] - }] - }, { - "id": 69, - "name": "Sierra Beasley", - "reportsTo": 52, - "phone": "(271) 953-1968", - "extension": 3324, - "hireDate": new Date(2011, 4, 2), - "fullTime": true, - "position": "Team Lead", - "timeInPosition": 3, - "employees": [{ - "id": 38, - "name": "Elton Tucker", - "reportsTo": 69, - "phone": "(988) 930-9331", - "extension": 9216, - "hireDate": new Date(2015, 6, 4), - "fullTime": true, - "position": "Support Officer", - "timeInPosition": 1 - }, { - "id": 39, - "name": "Iona Brennan", - "reportsTo": 69, - "phone": "(356) 563-0600", - "extension": 5634, - "hireDate": new Date(2010, 9, 23), - "fullTime": true, - "position": "Junior Support Officer", - "timeInPosition": 4 - }, { - "id": 53, - "name": "Paul Campos", - "reportsTo": 69, - "phone": "(899) 205-1689", - "extension": 8586, - "hireDate": new Date(2011, 3, 17), - "fullTime": true, - "position": "Interaction Designer", - "timeInPosition": 4, - "employees": [{ - "id": 66, - "name": "Gloria Freeman", - "reportsTo": 53, - "phone": "(344) 950-9168", - "extension": 4738, - "hireDate": new Date(2013, 5, 6), - "fullTime": true, - "position": "Junior Interaction Designer", - "timeInPosition": 0 - }] - }, { - "id": 57, - "name": "Alyssa Hansen", - "reportsTo": 69, - "phone": "(548) 925-4799", - "extension": 4716, - "hireDate": new Date(2011, 1, 19), - "fullTime": true, - "position": "Junior Software Developer", - "timeInPosition": 6 - }, { - "id": 82, - "name": "Yael Walters", - "reportsTo": 69, - "phone": "(311) 489-8191", - "extension": 6520, - "hireDate": new Date(2013, 7, 4), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 6 - }, { - "id": 87, - "name": "Dahlia Hunt", - "reportsTo": 69, - "phone": "(720) 339-5202", - "extension": 3690, - "hireDate": new Date(2011, 3, 26), - "fullTime": true, - "position": "Senior Software Developer", - "timeInPosition": 4 - }, { - "id": 94, - "name": "Adria Stanley", - "reportsTo": 69, - "phone": "(536) 357-6391", - "extension": 3374, - "hireDate": new Date(2014, 7, 26), - "fullTime": true, - "position": "Software Developer", - "timeInPosition": 0 - }] - }] - }] - }, { - "id": 3, - "name": "Priscilla Frank", - "reportsTo": 1, - "phone": "(278) 927-2684", - "extension": 4183, - "hireDate": new Date(2014, 11, 30), - "fullTime": true, - "position": "Chief Product Officer", - "timeInPosition": 2, - "employees": [{ - "id": 4, - "name": "Ursula Holmes", - "reportsTo": 3, - "phone": "(302) 760-2034", - "extension": 2226, - "hireDate": new Date(2011, 6, 6), - "fullTime": true, - "position": "EVP, Product Strategy", - "timeInPosition": 4 - }, { - "id": 24, - "name": "Melvin Carrillo", - "reportsTo": 3, - "phone": "(348) 933-5167", - "extension": 2482, - "hireDate": new Date(2014, 7, 21), - "fullTime": true, - "position": "Director, Developer Relations", - "timeInPosition": 6, - "employees": [{ - "id": 29, - "name": "Martha Chavez", - "reportsTo": 24, - "phone": "(860) 754-3464", - "extension": 4531, - "hireDate": new Date(2013, 3, 12), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 30, - "name": "Oren Fox", - "reportsTo": 24, - "phone": "(572) 414-3299", - "extension": 4849, - "hireDate": new Date(2013, 5, 14), - "fullTime": false, - "position": "Developer Advocate", - "timeInPosition": 0 - }, { - "id": 41, - "name": "Amos Barr", - "reportsTo": 24, - "phone": "(470) 381-3718", - "extension": 7643, - "hireDate": new Date(2010, 3, 9), - "fullTime": true, - "position": "Developer Advocate", - "timeInPosition": 2 - }] - }] - }, { - "id": 5, - "name": "Anika Vega", - "reportsTo": 1, - "phone": "(910) 714-1802", - "extension": 6353, - "hireDate": new Date(2010, 2, 25), - "fullTime": true, - "position": "Chief Process Officer", - "timeInPosition": 5, - "employees": [{ - "id": 10, - "name": "Vernon Ballard", - "reportsTo": 5, - "phone": "(702) 185-8890", - "extension": 9242, - "hireDate": new Date(2015, 6, 26), - "fullTime": true, - "position": "Director Facilities", - "timeInPosition": 2, - "employees": [{ - "id": 16, - "name": "Ali Guy", - "reportsTo": 10, - "phone": "(429) 912-6578", - "extension": 2225, - "hireDate": new Date(2014, 6, 29), - "fullTime": true, - "position": "Operations Manager", - "timeInPosition": 4, - "employees": [{ - "id": 23, - "name": "Bruce Reilly", - "reportsTo": 16, - "phone": "(995) 243-7302", - "extension": 4815, - "hireDate": new Date(2015, 4, 1), - "fullTime": true, - "position": "Head of Security", - "timeInPosition": 1, - "employees": [{ - "id": 26, - "name": "Rowan Morin", - "reportsTo": 23, - "phone": "(792) 141-4374", - "extension": 1844, - "hireDate": new Date(2015, 7, 30), - "fullTime": true, - "position": "Building Security", - "timeInPosition": 5 - }, { - "id": 44, - "name": "Benedict Soto", - "reportsTo": 23, - "phone": "(822) 282-5991", - "extension": 6422, - "hireDate": new Date(2012, 6, 1), - "fullTime": false, - "position": "Building Security", - "timeInPosition": 4 - }] - }, { - "id": 48, - "name": "Maryam Rios", - "reportsTo": 16, - "phone": "(673) 764-6720", - "extension": 531, - "hireDate": new Date(2014, 3, 3), - "fullTime": true, - "position": "Team Lead, Personal Assistants", - "timeInPosition": 1, - "employees": [{ - "id": 58, - "name": "Rose Mcintyre", - "reportsTo": 48, - "phone": "(771) 615-4590", - "extension": 7094, - "hireDate": new Date(2015, 6, 30), - "fullTime": false, - "position": "Personal Assistant", - "timeInPosition": 6 - }] - }] - }] - }] - }, { - "id": 7, - "name": "Nevada Hart", - "reportsTo": 1, - "phone": "(254) 220-1576", - "extension": 6649, - "hireDate": new Date(2015, 8, 17), - "fullTime": true, - "position": "Chief Financial Officer", - "timeInPosition": 6, - "employees": [{ - "id": 14, - "name": "Zena Sanford", - "reportsTo": 7, - "phone": "(437) 568-8160", - "extension": 4452, - "hireDate": new Date(2010, 11, 30), - "fullTime": true, - "position": "VP, Finance", - "timeInPosition": 4 - }, { - "id": 15, - "name": "Quinlan Howe", - "reportsTo": 7, - "phone": "(464) 334-9748", - "extension": 8722, - "hireDate": new Date(2011, 6, 9), - "fullTime": false, - "position": "Senior Director, Finance", - "timeInPosition": 0, - "employees": [{ - "id": 17, - "name": "Indira Lopez", - "reportsTo": 15, - "phone": "(301) 368-0938", - "extension": 8027, - "hireDate": new Date(2013, 8, 18), - "fullTime": true, - "position": "ERP Team Lead", - "timeInPosition": 4, - "employees": [{ - "id": 18, - "name": "Lareina Lara", - "reportsTo": 17, - "phone": "(233) 457-7482", - "extension": 1996, - "hireDate": new Date(2010, 4, 30), - "fullTime": true, - "position": "ERP Solutions Consultant", - "timeInPosition": 6 - }, { - "id": 19, - "name": "Maxwell Wise", - "reportsTo": 17, - "phone": "(570) 494-2531", - "extension": 9865, - "hireDate": new Date(2012, 5, 19), - "fullTime": true, - "position": "Systems Engineer", - "timeInPosition": 0 - }] - }, { - "id": 20, - "name": "Hunter Mcbride", - "reportsTo": 15, - "phone": "(409) 442-7016", - "extension": 4284, - "hireDate": new Date(2012, 10, 20), - "fullTime": true, - "position": "Senior Director, Tax", - "timeInPosition": 3 - }, { - "id": 21, - "name": "Jana Serrano", - "reportsTo": 15, - "phone": "(910) 718-4620", - "extension": 6970, - "hireDate": new Date(2010, 4, 2), - "fullTime": true, - "position": "Financial Planning & Analysis Manager", - "timeInPosition": 2 - }, { - "id": 22, - "name": "Zachery Shelton", - "reportsTo": 15, - "phone": "(310) 240-8675", - "extension": 4527, - "hireDate": new Date(2011, 11, 23), - "fullTime": false, - "position": "Corporate Finance Controller", - "timeInPosition": 6, - "employees": [{ - "id": 28, - "name": "Cullen Freeman", - "reportsTo": 22, - "phone": "(136) 554-8814", - "extension": 9861, - "hireDate": new Date(2014, 3, 15), - "fullTime": true, - "position": "Treasurer Accountant", - "timeInPosition": 2 - }, { - "id": 31, - "name": "Quinn Dean", - "reportsTo": 22, - "phone": "(152) 613-3507", - "extension": 6621, - "hireDate": new Date(2015, 1, 29), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 6 - }, { - "id": 34, - "name": "Samantha Brady", - "reportsTo": 22, - "phone": "(206) 398-4328", - "extension": 1157, - "hireDate": new Date(2011, 2, 13), - "fullTime": true, - "position": "Accountant", - "timeInPosition": 2, - "employees": [{ - "id": 35, - "name": "Tamara Green", - "reportsTo": 34, - "phone": "(219) 248-2789", - "extension": 4880, - "hireDate": new Date(2014, 2, 4), - "fullTime": true, - "position": "Junior Accountant", - "timeInPosition": 6 - }] - }, { - "id": 36, - "name": "Olympia Coleman", - "reportsTo": 22, - "phone": "(944) 853-6383", - "extension": 2136, - "hireDate": new Date(2013, 7, 31), - "fullTime": true, - "position": "Collections Manager", - "timeInPosition": 3 - }, { - "id": 37, - "name": "Breanna Goodwin", - "reportsTo": 22, - "phone": "(379) 988-9630", - "extension": 5898, - "hireDate": new Date(2010, 5, 23), - "fullTime": false, - "position": "Payroll Specialist", - "timeInPosition": 4 - }] - }, { - "id": 27, - "name": "Curran Travis", - "reportsTo": 15, - "phone": "(438) 135-8033", - "extension": 3841, - "hireDate": new Date(2011, 6, 13), - "fullTime": true, - "position": "Finance Controller", - "timeInPosition": 5 - }] - }] - }, { - "id": 8, - "name": "Hunter Fry", - "reportsTo": 1, - "phone": "(766) 358-9858", - "extension": 3741, - "hireDate": new Date(2011, 2, 12), - "fullTime": false, - "position": "General Counsel", - "timeInPosition": 3, - "employees": [{ - "id": 9, - "name": "Kuame Carrillo", - "reportsTo": 8, - "phone": "(192) 383-1305", - "extension": 9228, - "hireDate": new Date(2011, 2, 22), - "fullTime": true, - "position": "Associate General Councel", - "timeInPosition": 0 - }, { - "id": 13, - "name": "Stacy Todd", - "reportsTo": 8, - "phone": "(925) 286-3327", - "extension": 8565, - "hireDate": new Date(2014, 7, 5), - "fullTime": true, - "position": "Councel", - "timeInPosition": 0 - }, { - "id": 33, - "name": "Valentine Wyatt", - "reportsTo": 8, - "phone": "(165) 166-6205", - "extension": 3588, - "hireDate": new Date(2015, 5, 21), - "fullTime": true, - "position": "Councel", - "timeInPosition": 5 - }, { - "id": 86, - "name": "Daniel Mccarthy", - "reportsTo": 8, - "phone": "(624) 483-6206", - "extension": 9112, - "hireDate": new Date(2013, 12, 3), - "fullTime": false, - "position": "Staff Attorney", - "timeInPosition": 0 - }] - }] - }]; - export default employees; \ No newline at end of file diff --git a/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/main.jsx b/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treelist/treelist-locked-columns-resizing/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treeview/treeview-adding-nodes/app.jsx b/docs/knowledge-base/examples/treeview/treeview-adding-nodes/app.jsx deleted file mode 100644 index 1b6f6cb1..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-adding-nodes/app.jsx +++ /dev/null @@ -1,99 +0,0 @@ -import * as React from 'react'; -import { TreeView } from '@progress/kendo-react-treeview'; -import { Button } from '@progress/kendo-react-buttons'; -import { Window } from '@progress/kendo-react-dialogs'; -import { Input } from '@progress/kendo-react-inputs'; -const tree = [ - { - text: 'Furniture', - expanded: true, - items: [ - { - text: 'Tables & Chairs', - }, - { - text: 'Sofas', - }, - { - text: 'Occasional Furniture', - }, - ], - }, - { - text: 'Decor', - expanded: true, - items: [ - { - text: 'Bed Linen', - }, - { - text: 'Curtains & Blinds', - }, - { - text: 'Carpets', - }, - ], - }, -]; -const App = () => { - const [data, setData] = React.useState(tree); - const [visible, setVisible] = React.useState(false); - const [showButton, setShowButton] = React.useState(false); - const [value, setValue] = React.useState(''); - const [parentName, setParentName] = React.useState(''); - - const toggleDialog = () => { - setVisible(!visible); - }; - - const handleSubmit = (e, parentName) => { - const newTree = data; - newTree.map((item) => { - if (item.text === parentName) { - item.items = [ - ...item.items, - { - text: value, - }, - ]; - } - }); - setData(newTree); - toggleDialog(); - }; - - const handleChange = (e) => { - setTimeout(setValue(e.value), 3000); - }; - - const handleNodeClick = (e) => { - if (e.item.items) { - setParentName(e.item.text); - setShowButton(true); - } else { - setShowButton(false); - } - }; - return ( - <> - -
    - {showButton && } - {visible && ( - - - - - )} -
    - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treeview/treeview-adding-nodes/main.jsx b/docs/knowledge-base/examples/treeview/treeview-adding-nodes/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-adding-nodes/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treeview/treeview-deleting/app.jsx b/docs/knowledge-base/examples/treeview/treeview-deleting/app.jsx deleted file mode 100644 index 2156da15..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-deleting/app.jsx +++ /dev/null @@ -1,93 +0,0 @@ -import * as React from 'react'; -import { TreeView } from '@progress/kendo-react-treeview'; - -const MyContext = React.createContext({ - deleteItem: null, -}); - -const tree = [ - { - text: 'My Documents', - expanded: true, - id: 1, - items: [ - { - text: 'KendoReact Project', - expanded: true, - id: 2, - items: [ - { - text: 'about.html', - id: 3, - }, - { - text: 'index.html', - id: 4, - }, - { - text: 'logo.png', - id: 5, - }, - ], - }, - ], - }, -]; - -const MyItem = (props) => { - const currentContext = React.useContext(MyContext); - return ( - <> - {props.item.text} - currentContext.deleteItem(props)} - > - - ); -}; - -const App = () => { - const [treeData, setTreeData] = React.useState(tree); - const searchRecursivly = (id, items) => { - let newItems = []; - - items.forEach((item) => { - if (item.id != id) { - if (item.items && item.items.length > 0) { - item.items = searchRecursivly(id, item.items); - } - newItems.push(item); - } - }); - return newItems; - }; - - const deleteItem = (props) => { - let newItems = []; - - treeData.forEach((item) => { - if (item.id != props.item.id) { - if (item.items && item.items.length > 0) { - item.items = searchRecursivly(props.item.id, item.items); - } - newItems.push(item); - } - }); - - console.log(newItems); - setTreeData(newItems); - }; - return ( - - {' '} - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/treeview/treeview-deleting/main.jsx b/docs/knowledge-base/examples/treeview/treeview-deleting/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-deleting/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treeview/treeview-editing/app.jsx b/docs/knowledge-base/examples/treeview/treeview-editing/app.jsx deleted file mode 100644 index 77b9db29..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-editing/app.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import * as React from 'react'; -import { TreeView } from '@progress/kendo-react-treeview'; -import '@progress/kendo-react-animation'; - -const tree = [ - { - text: 'Furniture', - expanded: true, - items: [ - { text: 'Tables & Chairs' }, - { text: 'Sofas' }, - { text: 'Occasional Furniture' }, - ], - }, - { - text: 'Decor', - items: [ - { text: 'Bed Linen' }, - { text: 'Curtains & Blinds' }, - { text: 'Carpets' }, - ], - }, -]; - -class App extends React.Component { - render() { - return ( - - ); - } - - handleChange = (e, item) => { - item.text = e.target.value; - this.forceUpdate(); - }; - - handleBlur = (e, item) => { - item.edit = false; - this.forceUpdate(); - }; - - itemKeyDown = (e) => { - if (e.keyCode === 32) { - e.stopPropagation(); - } - }; - - itemRender = (props) => { - if (props.item.edit) { - return ( - - this.handleChange(e, props.item)} - onBlur={(e) => this.handleBlur(e, props.item)} - /> - - ); - } - return {props.item.text}; - }; - onItemClick = (event) => { - event.item.edit = true; - this.forceUpdate(); - }; - onExpandChange = (event) => { - event.item.expanded = !event.item.expanded; - this.forceUpdate(); - }; -} - -export default App; diff --git a/docs/knowledge-base/examples/treeview/treeview-editing/main.jsx b/docs/knowledge-base/examples/treeview/treeview-editing/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-editing/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/treeview/treeview-search/app.jsx b/docs/knowledge-base/examples/treeview/treeview-search/app.jsx deleted file mode 100644 index b9510954..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-search/app.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; -import { TreeView } from '@progress/kendo-react-treeview' -import '@progress/kendo-react-animation' - -const treeData = [{ - text: 'Furniture', expanded: true, items: [ - { text: 'Tables & Chairs' }, { text: 'Sofas' }, { text: 'Occasional Furniture' }] -}, { - text: 'Decor', expanded: true, items: [ - { text: 'Bed Linen' }, { text: 'Curtains & Blinds' }, { text: 'Carpets' }] -}]; - -class App extends React.Component { - - handleSearch = () => { - let value = document.querySelector('.k-textbox').value - let newData = this.search(treeData, value) - this.setState({ data: newData }) - } - - search = (items, term) => { - return items.reduce((acc, item) => { - if (this.contains(item.text, term)) { - acc.push(item); - } else if (item.items && item.items.length > 0) { - let newItems = this.search(item.items, term); - if (newItems && newItems.length > 0) { - acc.push({ text: item.text, items: newItems, expanded: item.expanded }); - } - } - return acc; - }, []); - } - - contains = (text, term) => { - return text.toLowerCase().indexOf(term.toLowerCase()) >= 0; - } - - state = { - data: treeData - } - - render() { - return ( -
    - -
    - -
    - ); - } -} - -export default App; - diff --git a/docs/knowledge-base/examples/treeview/treeview-search/main.jsx b/docs/knowledge-base/examples/treeview/treeview-search/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/treeview/treeview-search/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/upload/paste-image/app.jsx b/docs/knowledge-base/examples/upload/paste-image/app.jsx deleted file mode 100644 index 045495e1..00000000 --- a/docs/knowledge-base/examples/upload/paste-image/app.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import * as React from "react"; -import { Upload } from "@progress/kendo-react-upload"; -import { guid } from "@progress/kendo-react-common"; - -class App extends React.Component { - constructor(props) { - super(props); - - this.state = { - files: [] - }; - } - - onAdd = event => { - console.log(event.newState); - this.setState({ - files: event.newState - }); - }; - - onRemove = event => { - this.setState({ - files: event.newState - }); - }; - - onProgress = event => { - this.setState({ - files: event.newState - }); - }; - - onStatusChange = event => { - this.setState({ - files: event.newState - }); - }; - - handlePaste = e => { - if (e.clipboardData.files.length) { - const fileObject = e.clipboardData.files[0]; - const file = { - getRawFile: () => fileObject, - name: fileObject.name, - size: fileObject.size, - uid: guid(), - status: 2, - progress: 0 - }; - - const filesState = this.state.files.map(f => ({ ...f })); - filesState.push(file); - - this.setState({ files: filesState }); - } else { - alert('No image data was found in your clipboard. Copy an image first or take a screenshot.'); - } - }; - - render() { - return ( -
    - -
    Paste Area
    -
    - ); - } -} - -export default App; diff --git a/docs/knowledge-base/examples/upload/paste-image/main.jsx b/docs/knowledge-base/examples/upload/paste-image/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/upload/paste-image/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/upload/upload-change-messages/app.jsx b/docs/knowledge-base/examples/upload/upload-change-messages/app.jsx deleted file mode 100644 index 4bbc38a0..00000000 --- a/docs/knowledge-base/examples/upload/upload-change-messages/app.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; -import { Upload } from '@progress/kendo-react-upload'; -import { LocalizationProvider, loadMessages } from '@progress/kendo-react-intl'; -const App = () => { - const [files, setFiles] = React.useState([]); - - const onAdd = (event) => { - console.log('onAdd: ', event.affectedFiles); - setFiles(event.newState); - }; - - const onRemove = (event) => { - console.log('onRemove: ', event.affectedFiles); - setFiles(event.newState); - }; - - const onProgress = (event) => { - console.log('onProgress: ', event.affectedFiles); - setFiles(event.newState); - }; - - const onStatusChange = (event) => { - console.log('onStatusChange: ', event.affectedFiles); - setFiles(event.newState); - }; - - //Use loadMessages to override the default messages that you want to change and add them to a new language - loadMessages( - { - upload: { - dropFilesHere: 'Drop file here to upload', - select: 'SELECT FILE', - }, - }, - 'myCustomMessages' - ); - - return ( - - - - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/upload/upload-change-messages/main.jsx b/docs/knowledge-base/examples/upload/upload-change-messages/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/upload/upload-change-messages/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/examples/upload/upload-icon-for-upload-button/app.jsx b/docs/knowledge-base/examples/upload/upload-icon-for-upload-button/app.jsx deleted file mode 100644 index cbf372f8..00000000 --- a/docs/knowledge-base/examples/upload/upload-icon-for-upload-button/app.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react'; -import { Upload } from '@progress/kendo-react-upload'; - -const App = () => { - return ( -
    - Upload} - multiple={true} - defaultFiles={[]} - withCredentials={false} - saveUrl={'https://demos.telerik.com/kendo-ui/service-v4/upload/save'} - removeUrl={ - 'https://demos.telerik.com/kendo-ui/service-v4/upload/remove' - } - /> - } - multiple={true} - defaultFiles={[]} - withCredentials={false} - saveUrl={'https://demos.telerik.com/kendo-ui/service-v4/upload/save'} - removeUrl={ - 'https://demos.telerik.com/kendo-ui/service-v4/upload/remove' - } - /> -
    - ); -}; - -export default App; diff --git a/docs/knowledge-base/examples/upload/upload-icon-for-upload-button/main.jsx b/docs/knowledge-base/examples/upload/upload-icon-for-upload-button/main.jsx deleted file mode 100644 index 36d8526e..00000000 --- a/docs/knowledge-base/examples/upload/upload-icon-for-upload-button/main.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './app' - -const root = createRoot(document.querySelector('my-app')); -root.render(); \ No newline at end of file diff --git a/docs/knowledge-base/excel-conditional-cell-styling.md b/docs/knowledge-base/excel-conditional-cell-styling.md deleted file mode 100644 index 70e6c08d..00000000 --- a/docs/knowledge-base/excel-conditional-cell-styling.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Conditional Cell Styling in ExcelExport -description: This article provides guidance on how to apply conditional cell styling based on specific data conditions within the ExcelExport -type: how-to -page_title: Applying Conditional Cell Styling in the ExcelExport Component -slug: excel-conditional-cell-styling -tags: excel-export, conditional-styling, cell-formatting -res_type: kb -category: knowledge-base -ticketid: 1633213 ---- - -## Environment - - - - - - - - - - - -
    Product Version7.0.2
    ProductProgress® KendoReact
    - -## Description - -I want to apply conditional cell styling in the ExcelExport component within my application. Specifically, I need to format cells as bold based on the presence of a `is_total` flag in the row data. However, the `is_total` flag should not be included in the exported Excel data. - -## Solution - -To achieve conditional cell styling in the ExcelExport, set a flag variable to the exported data and apply the required styles if the flag is set to `true` - -{% meta id:index height:330 %} -{% embed_file excel/excel-conditional-styling.jsx preview %} -{% endmeta %} diff --git a/docs/knowledge-base/excel-export-of-both-parent-and-child-grid-data.md b/docs/knowledge-base/excel-export-of-both-parent-and-child-grid-data.md deleted file mode 100644 index 4c6f27aa..00000000 --- a/docs/knowledge-base/excel-export-of-both-parent-and-child-grid-data.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Export to Excel Both Parent and Child Grid Data -description: An example on how to export to Excel both parent and child KendoReact Grids. -type: how-to -page_title: Excel Export of Both Parent and Child Grid Data - KendoReact Grid -slug: excel-export-of-both-parent-and-child-grid-data -position: -tags: grid, export, excel -ticketid: 1424691 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version3.0.0
    ProductProgress® KendoReact
    - - -## Description -I have a parent Grid with child Grids as details, how to export all to Excel. - -## Solution -This requires using a chain of Promises to request the data for all child Grids and append it to the exported document after each parent row item. - -This is an example showcasing this. The example contains comments for the most specific parts: - -{% meta id:index height:760 %} -{% embed_file grid/excel-export-parent-child/app.jsx preview %} -{% embed_file grid/excel-export-parent-child/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/excel-export-with-column-reorder.md b/docs/knowledge-base/excel-export-with-column-reorder.md deleted file mode 100644 index 985091f8..00000000 --- a/docs/knowledge-base/excel-export-with-column-reorder.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Export to Excel Grid Reordered Columns -description: An example on how to export to Excel the Grid columns after they have been reordered. -type: how-to -page_title: Export to Excel Grid Reordered Columns - KendoReact Grid -slug: excel-export-of-both-parent-and-child-grid-data -position: -tags: grid, export, excel -ticketid: 1580886 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.5.0
    ProductProgress® KendoReact
    - -## Description -I want to maintain the column orders when I export the Grid to Excel, how can I achieve this? - -## Solution -This requires setting the columns inside the ExcelExport, then sorting and updating the gridColumns inside the onColumnReorder event. - -This is an example showcasing this approach: - -{% meta id:index height:600 %} -{% embed_file grid/excel-export-with-column-reorder/app.jsx preview %} -{% embed_file grid/excel-export-with-column-reorder/main.jsx %} -{% embed_file grid/excel-export-with-column-reorder/products.json %} -{% endmeta %} - diff --git a/docs/knowledge-base/excel-export-with-custom-header-footer.md b/docs/knowledge-base/excel-export-with-custom-header-footer.md deleted file mode 100644 index a8d9ee16..00000000 --- a/docs/knowledge-base/excel-export-with-custom-header-footer.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Export Data to Excel with Custom Header and Footer -description: An example on how to export data to Excel with a custom header and footer when working with the KendoReact Grid. -type: how-to -page_title: Export Data to Excel with Custom Headers and Footers - KendoReact Grid -slug: excel-export-with-custom-header-footer -tags: grid, kendoreact, export, excel, header, footer -ticketid: 1463826 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.15.0
    ProductProgress® KendoReact
    - - -## Description - -How can I add a custom header and footer to the exported data to Excel? - -## Solution - -This can be done by customizing the [Workbook](https://www.telerik.com/kendo-react-ui/components/excelexport/customization/) that will be exported. In this case, we have to add new rows to the current rows collection. - -The following example shows how to: - -1. Add a new row at the beginning and at the end of the workbook. -2. Apply [additional settings](https://www.telerik.com/kendo-react-ui/components/excelexport/api/KendoOoxml/) to the cells. -3. Freeze the first two rows in order to have the header and the column titles to be visible when scrolling. - -{% meta id:index height:640 %} -{% embed_file grid/excel-export-header-footer/app.jsx preview %} -{% embed_file grid/excel-export-header-footer/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - - diff --git a/docs/knowledge-base/export-to-excel-multiple-grids.md b/docs/knowledge-base/export-to-excel-multiple-grids.md deleted file mode 100644 index bb922c8a..00000000 --- a/docs/knowledge-base/export-to-excel-multiple-grids.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Export Multiple Grids to Excel -description: An example on how to export multiple KendoReact Grids to a single Excel file. -type: how-to -page_title: Export Multiple Grids to Excel - KendoReact Grid -slug: export-to-excel-multiple-grids -tags: kendoreact, export, multiple, grids, excel -ticketid: 1408161 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
    ProductProgress® KendoReact
    - - -## Description - -How can I export multiple KendoReact Grids (tables) upon a single click action? - -## Solution - -Set the second Grid sheet as the second sheet of the first document and export only the first Grid. - -{% meta id:index height:760 %} -{% embed_file grid/multiple-grid-export-excel/app.jsx preview %} -{% embed_file grid/multiple-grid-export-excel/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/file-upload-in-form.md b/docs/knowledge-base/file-upload-in-form.md deleted file mode 100644 index 9e51e052..00000000 --- a/docs/knowledge-base/file-upload-in-form.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Use the KendoReact Upload in the KendoReact Form -description: An example on how to use the KendoReact Upload component in the KendoReact Form. -type: how-to -page_title: Use the KendoReact Upload Component in the KendoReact Form - KendoReact Form -slug: file-upload-in-form -tags: form, kendoreact, upload -ticketid: 1517340 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.5.0
    ProductProgress® KendoReact
    - - -## Description - -How can I use the Upload component inside a Form? - -## Solution - -In order to achieve this, the Upload files data has to be added to the Form data and then submitted programmatically to the server. - - -{% meta id height:460 %} -{% embed_file form/file-upload/app.jsx preview %} -{% embed_file form/file-upload/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/filter-the-grid-with-checkboxes.md b/docs/knowledge-base/filter-the-grid-with-checkboxes.md deleted file mode 100644 index 10750c97..00000000 --- a/docs/knowledge-base/filter-the-grid-with-checkboxes.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Filter the Grid with Checkboxes -description: An example on how to filter the KendoReact Grid by using checkboxes. -type: how-to -page_title: Filter the Grid by Using Checkboxes - KendoReact Grid -slug: filter-the-grid-with-checkboxes -tags: kendoreact, grid, filter, checkbox -ticketid: 1410595 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.0.0
    ProductProgress® KendoReact
    - - -## Description - -How can I filter the KendoReact Grid data with checkboxes similar to the Kendo UI for jQuery Grid? - -## Solution - -This is already a built-in option of the Grid and the example can be observed [here.]({% slug column_menu_grid %}#toc-checkbox-filter) - -### Older Solution - -In KendoReact, you can programmatically implement the data filtering with checkboxes for the Grid by using the [ColumnMenu]({% slug column_menu_grid %}) component. - -{% meta id:index height:580 %} -{% embed_file grid/grid-filter-checkbox/app.jsx preview %} -{% embed_file grid/grid-filter-checkbox/main.jsx %} -{% embed_file grid/grid-filter-checkbox/customColumnMenu.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/form-getting-editor-ref-and-keydown.md b/docs/knowledge-base/form-getting-editor-ref-and-keydown.md deleted file mode 100644 index 94df3bac..00000000 --- a/docs/knowledge-base/form-getting-editor-ref-and-keydown.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Get ref of an editor within the Form and handle onKeyDown event -description: An example on how to get reference to a Form editor and handle editor events. -type: how-to -page_title: Get reference to a Form editor and events - KendoReact Form -slug: form-getting-editor-ref-and-keydown -tags: form, kendoreact, input, ref -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - - -## Description - -How can I get ref of a Form editor and its events in the context of the Form component. - -## Solution - -Pass custom properties to the Field component and access them within the custom component set to the "component" property of the Field. Within the custom component set the "ref" and the event handler. - -Following is an example demonstrating this approach: - - -{% meta id height:360 %} -{% embed_file form/getting-editor-ref-and-keydown/app.jsx preview %} -{% embed_file form/getting-editor-ref-and-keydown/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/form-reset-and-change-initial-values.md b/docs/knowledge-base/form-reset-and-change-initial-values.md deleted file mode 100644 index ade96240..00000000 --- a/docs/knowledge-base/form-reset-and-change-initial-values.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Change the initial values and reset the Form -description: An example on how to change the initial values and reset the KendoReact Form -type: how-to -page_title: Reset The Form To Changed Initial Values - KendoReact Form -slug: form-reset-and-change-initial-values -tags: form, kendoreact, reset, initial -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - - -## Description - -How can I reset the Form multiple times to the initial values? Also, can I change the initial values dynamically? - -## Solution - -To reset the Form to the initial values the component must re-mount. This can be achieved by changing the "key" property of the Form to unique value. - -The same technique can be used for changing the initial value by first changing the variable in the state and then changing the "key" property. - -Following is an example demonstrating this approach: - - -{% meta id height:460 %} -{% embed_file form/form-reset-and-change-initial-values/app.jsx preview %} -{% embed_file form/form-reset-and-change-initial-values/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/gantt-scroll-to-today.md b/docs/knowledge-base/gantt-scroll-to-today.md deleted file mode 100644 index 3f72cd46..00000000 --- a/docs/knowledge-base/gantt-scroll-to-today.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Scroll to today's date in the GanttWeekView -description: An example on how scroll the GanttWeekView to today's date. -type: how-to -page_title: Scroll to today's date in the WeekView on load - KendoReact Gantt -slug: gantt-scroll-to-today -tags: gantt, scroll, today -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - - -## Description - -I want the scroll position of the GanttWeekView to be at the today's date on load - -## Solution - -For achieving the desired result, define a timelineHeaderCell for the GanttWeekView where a custom class name will be added to the header cell for today's date. Then, within React.useEffect, after the Gantt is rendered, get reference to the scroll and move the scroll to the cell with the custom class name that was added. - -Following is an example demonstrating this approach: - - -{% meta id height:660 %} -{% embed_file gantt/scroll-to-today/app.jsx preview %} -{% embed_file gantt/scroll-to-today/main.jsx %} -{% embed_file gantt/scroll-to-today/data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-add-clear-filters-button.md b/docs/knowledge-base/grid-add-clear-filters-button.md deleted file mode 100644 index 2558bb1e..00000000 --- a/docs/knowledge-base/grid-add-clear-filters-button.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Add button in the Grid's toolbar for clearing all filters -description: An example on how to add button in the toolbar of the Grid for clearing all filters. -type: how-to -page_title: Add button for clearing all filters in the Grid - KendoReact Grid -slug: grid-add-clear-filters-button -tags: grid, filter, filtering -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description -I want to add button in the Grid's toolbar for clearing all filters - -## Solution -For achieving the desired result a Button component can be placed within the GridToolbar and within its click event the filter object of the DataState stored in the state can be set to null - -This is an example showcasing how to limit the value: - -{% meta height:360 %} -{% embed_file grid/grid-add-clear-filters-button/app.jsx preview %} -{% embed_file grid/grid-add-clear-filters-button/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-add-dirty-indicator.md b/docs/knowledge-base/grid-add-dirty-indicator.md deleted file mode 100644 index a6c7155a..00000000 --- a/docs/knowledge-base/grid-add-dirty-indicator.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Add dirty indicator in Grid cells with in-cell editing -description: An example on how to render dirty indicator for edited cells in Grid with in-cell editing -type: how-to -page_title: Adding dirty indicator for edited cells in Grid with in-cell editing - KendoReact Grid -slug: grid-add-dirty-indicator -position: -tags: grid, editing, dirty, indicator, incell -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - -## Description -I want to show dirty indicator for edited cells in Grid with enabled in-cell editing. - -## Solution -This can be achieved by tracking the changes and compare them with the original data. With the stored information about the modified cell values we then can add a class name within the cellRender event of the Grid that we can use for displaying a dirty indicator. - -The changes are tracked within the onItemChange event. The dirty collection is cleared after saving or canceling the changes (within saveChanges and cancelChanges). - -The custom style for the dirty cells is within the "styles.css" file targeting the TD elements with class "dirty". - -This is an example showcasing this approach: - -{% meta id:index height:480 %} -{% embed_file grid/grid-add-dirty-indicator/app.jsx preview %} -{% embed_file grid/grid-add-dirty-indicator/main.jsx %} -{% embed_file grid/grid-add-dirty-indicator/sample-products.json %} -{% embed_file grid/grid-add-dirty-indicator/renderers.jsx %} -{% embed_file grid/grid-add-dirty-indicator/styles.css %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-add-empty-rows.md b/docs/knowledge-base/grid-add-empty-rows.md deleted file mode 100644 index 6841e572..00000000 --- a/docs/knowledge-base/grid-add-empty-rows.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Add empty rows to fill the empty space in the data container -description: An example of how to add empty rows if the number of rows does not fill the data container of the Grid -type: how-to -page_title: Add Empty Rows To Fill The Data Container - KendoReact Grid -slug: grid-add-empty-rows -tags: grid, kendoreact, rows, empty -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - - -## Description - -I have Grid with enabled virtual scrolling and when I have fewer items I need to fill the empty space with empty rows. - -## Solution - -Find the last TR element within the "rowRender" of the Grid and return React.Fragment with the last row and the empty rows that will fill the empty space. - -Following is an example demonstrating this approach: - -{% meta id height:540 %} -{% embed_file grid/grid-add-empty-rows/app.jsx preview %} -{% embed_file grid/grid-add-empty-rows/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-add-new-column.md b/docs/knowledge-base/grid-add-new-column.md deleted file mode 100644 index e51321c3..00000000 --- a/docs/knowledge-base/grid-add-new-column.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Add New Columns to the Grid -description: An example of how to add new columns to the KendoReact Grid. -type: how-to -page_title: Add New Columns to the Grid - KendoReact Grid -slug: grid-add-new-column -tags: grid, kendoreact, column, columns, add, new -ticketid: 1516858 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.5.0
    ProductProgress® KendoReact
    - - -## Description - -How can I dynamically add new columns to the grid? - -## Solution - -This can be achieved with logic similar to the one in [`this demo`]({% slug editing_grid %}#toc-getting-started) of our documentation which showcases how to dynamically add new records (rows). - -The idea here is to have a button that opens up a Form, which when submitted updates the database that contains all records and adds a new element to all objects in the data. The columns should be rendered dynamically by mapping through the database, which will allow the Grid to visualize any changes made in the database. - - -{% meta id height:760 %} -{% embed_file grid/add-new-column/app.jsx preview %} -{% embed_file grid/add-new-column/main.jsx %} -{% embed_file grid/add-new-column/ColumnForm.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-add-operators-dropdown-for-custom-filtercell.md b/docs/knowledge-base/grid-add-operators-dropdown-for-custom-filtercell.md deleted file mode 100644 index 12ea8511..00000000 --- a/docs/knowledge-base/grid-add-operators-dropdown-for-custom-filtercell.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Add DropDownList for the operators in a custom filterCell of the Grid -description: An example on how to implement DropDownList operator in a custom filterCell of the Grid. -type: how-to -page_title: Add DropDownList for operators in a custom filterCell - KendoReact Grid -slug: grid-add-operators-dropdown-for-custom-filtercell -tags: grid, custom, filtering, operators -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - - -## Description - -How can I add a DropDownList for the operators in a custom filterCell? - -## Solution - -The GridFilterCellProps passed to the filterCell contain a collection with all operators (props.operators) that can be added to the "data" of the DropDownList. If there is a filter expression for the column, the selected operator is available within props.operator. - -Following is an example demonstrating how to add a DropDownList for the operators in a filterCell: - -{% meta id:index height:520 %} -{% embed_file grid/add-operators-dropdown-for-custom-filtercell/app.jsx preview %} -{% embed_file grid/add-operators-dropdown-for-custom-filtercell/main.jsx %} -{% embed_file grid/add-operators-dropdown-for-custom-filtercell/InputFilterCell.jsx %} -{% embed_file grid/add-operators-dropdown-for-custom-filtercell/sample-products.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-alternate-row-colors.md b/docs/knowledge-base/grid-alternate-row-colors.md deleted file mode 100644 index 3a17af2d..00000000 --- a/docs/knowledge-base/grid-alternate-row-colors.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Alternate the KendoReact Data Grid row colors with CSS -description: An example on how to alternate the row colors of the KendoReact Data Grid. -type: how-to -page_title: Alternate row colors - KendoReact Grid -slug: grid-alternate-row-colors -tags: grid, locked, row color, row, locked column color -ticketid: 1622261 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version7.3.0
    ProductProgress® KendoReact
    - -## Description - -I want to alternate the Grid row colors. In addition, I also want to apply this color to the rows that belong to [locked]({% slug api_grid-gridcolumnprops %}#toc-locked) columns. - -## Solution - -For changing the row, you can use the `.k-grid .k-table-row` class, and `.k-grid .k-table-row.k-table-alt-row` for the alt rows. As for the rows that are in locked columns, use the `.k-grid .k-table .k-grid-content-sticky` and `.k-master-row.k-table-alt-row .k-grid-content-sticky` classes. - -As an example, the following will set the background of the alt rows to `red` and the normal rows to `lightblue`. This will also be applied to the rows of the `ProductID` column that is locked because . - -```jsx -
    - - - - - - - - -
    -``` - -{% meta id:index height:480 %} -{% embed_file grid-row-colors/alternate-colors/app.jsx preview %} -{% embed_file grid-row-colors/alternate-colors/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - -You can also set the background color to specific rows using the [nth-child](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child) pseudo class. - -```css -.k-grid .k-table-row:nth-child(2) { - background: lightblue; -} -``` - -{% meta id:index height:480 %} -{% embed_file grid-row-colors/single-row-color/app.jsx preview %} -{% embed_file grid-row-colors/single-row-color/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-autocomplete-gridcolumnmenufilter.md b/docs/knowledge-base/grid-autocomplete-gridcolumnmenufilter.md deleted file mode 100644 index 8d64fedd..00000000 --- a/docs/knowledge-base/grid-autocomplete-gridcolumnmenufilter.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Use AutoComplete in the ColumnMenuFilter of the Grid -description: An example on how to use the AutoComplete component in the ColumnMenuFilter of KendoReact Grid. -type: how-to -page_title: Use AutoComplete in the ColumnMenuFilter of the Grid - KendoReact Grid -slug: grid-autocomplete-gridcolumnmenufilter -tags: grid, kendoreact, filter, columnmenu, autocomplete, columnmenufilter -ticketid: 1516740 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.5.0
    ProductProgress® KendoReact
    - - -## Description - -How can I use the AutoComplete components instead of the default input field in the ColumnMenuFilter of the Grid? - -## Solution - -This can be achieved using the [`filterUI`]({% slug api_grid_gridcolumnmenufilterprops %}#toc-filterui) property of the Grid ColumnMenuFilter to customize the interface of the ColumnMenuFilter. - -The three DropDownLists which contain the logic and filters that will be applied to the Grid should be rendered and the logic and filter operators are available in the props passed to the filterUI handler. The input fields should be replaced with AutoComplete components. - -The values of the DropDownLists that contain the filter operators should be kept in the state, because those values need to be passed to the corresponding onChange events from the props (onFirstFilterChange - part of [`firstFilterProps`]({% slug api_grid_gridcolumnmenufilteruiprops %}#toc-firstfilterprops), onSecondFilterChange - part of [`secondFilterProps`]({% slug api_grid_gridcolumnmenufilteruiprops %}#toc-secondfilterprops)). The DropDownList that contains the logic operator ("And" or "Or") should call the [`onLogicChange`]({% slug api_grid_gridcolumnmenufilteruiprops %}#toc-onlogicchange) event from the props. The onChange events from the props will filter the content in the Grid accordingly. - -The onChange event handlers of the AutoComplete components will be the ones that call the firstFilterProps.onChange and secondFilterProps.onChange events and will pass the operators from the state and the value from the event. - - -{% meta id height:520 %} -{% embed_file grid/columnmenufilter-with-autocomplete/app.jsx preview %} -{% embed_file grid/columnmenufilter-with-autocomplete/main.jsx %} -{% embed_file grid/columnmenufilter-with-autocomplete/customFilterUI.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-cell-edit-on-enter-press.md b/docs/knowledge-base/grid-cell-edit-on-enter-press.md deleted file mode 100644 index 58573770..00000000 --- a/docs/knowledge-base/grid-cell-edit-on-enter-press.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Enter the Edit Mode in a Grid Cell by Pressing Enter -description: An example on how to edit a KendoReact Grid cell by pressing the Enter key. -type: how-to -page_title: Enter the Edit Mode in a Grid Cell by Pressing Enter - KendoReact Grid -slug: grid-cell-edit-on-enter-press -tags: grid, edit, cell -ticketid: 1558287 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.1.0
    ProductProgress® KendoReact
    - - -## Description - -How can I edit a selected grid cell by pressing the Enter key? - -## Solution - -First we need to make the Grid navigatable by setting the [navigatable](https://www.telerik.com/kendo-react-ui/components/grid/api/GridProps/#toc-navigatable) prop to true. - -Create a custom cell component, attach the onKeyDown event and pass it to the [cellRender](https://www.telerik.com/kendo-react-ui/components/grid/api/GridProps/#toc-cellrender) prop: - -{% meta id:index height:520 %} -{% embed_file grid/cell-edit-on-enter-press/app.jsx preview %} -{% embed_file grid/cell-edit-on-enter-press/main.jsx %} -{% embed_file grid/cell-edit-on-enter-press/renderers.jsx %} -{% embed_file grid/cell-edit-on-enter-press/sample-products.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-cell-state-editing.md b/docs/knowledge-base/grid-cell-state-editing.md deleted file mode 100644 index a4181755..00000000 --- a/docs/knowledge-base/grid-cell-state-editing.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Grid Editing with Stateful Cells -description: An example on how to edit the Grid with cells that manage their own state -type: how-to -page_title: Grid Editing with Stateful Cells - KendoReact Grid -slug: grid-editing-stateful-cells -tags: grid, edit, cell, performance, state, stateful cells, stateful grid -ticketid: 1518255 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.16.1
    ProductProgress® KendoReact
    - -## Description - -How to update the entire Grid when the user stops editing instead of on each keypress in order to improve performance? - -## Solution - -This can be achieved by making the cells managing their own state via a custom [cell](https://www.telerik.com/kendo-react-ui/components/grid/api/GridColumnProps/#toc-cell) . - -{% meta id:index height:500 %} -{% embed_file grid/grid-cell-state-editing/app.jsx preview %} -{% embed_file grid/grid-cell-state-editing/main.jsx %} -{% embed_file grid/grid-cell-state-editing/products.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-cell-whitespace-textoverflow.md b/docs/knowledge-base/grid-cell-whitespace-textoverflow.md deleted file mode 100644 index 9c51c301..00000000 --- a/docs/knowledge-base/grid-cell-whitespace-textoverflow.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Set the white-space and text-overflow CSS properties of the KendoReact Grid cells -description: An example on how to set the white-space and text-overflow CSS properties of the Grid cells -type: how-to -page_title: Grid cell white-space and text-overflow - KendoReact Data Grid -slug: grid-cell-white-space-text-overflow -tags: grid, data grid, white-space, text-overflow, nowrap, break line, ellipsis -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Versionv5.13.1
    ProductProgress® KendoReact
    - - -## Description - -By default, the Grid cells have their CSS property `white-space` unset therefore defaulting to `normal`, while the `text-overflow` property is set to `ellipsis`. You can change the the white-space property to `nowrap` to keep the data on the same line, and text-overflow to `clip` to remove the ellipsis. - -## Solution - -You can achieve this by using either the Grid `cellRender` prop, or the GridCell `cell` prop, or using CSS. - -# Using CSS - -Setting className property to the Grid and using that class name as a selector to target only that instance. - -{% meta height:500 %} -{% embed_file grid/grid-whitespace-textoverflow/CSS/app.jsx preview %} -{% embed_file grid/grid-whitespace-textoverflow/CSS/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - -# Using cell - -Setting custom cell for a column and adding the styles directly to the TD element - -{% meta height:500 %} -{% embed_file grid/grid-whitespace-textoverflow/cell/app.jsx preview %} -{% embed_file grid/grid-whitespace-textoverflow/cell/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - -# Using cellRender - -Using the Grid's cellRender for adding the custom styles to all cells - -{% meta height:500 %} -{% embed_file grid/grid-whitespace-textoverflow/cellRender/app.jsx preview %} -{% embed_file grid/grid-whitespace-textoverflow/cellRender/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-change-boolean-filter-to-yesno.md b/docs/knowledge-base/grid-change-boolean-filter-to-yesno.md deleted file mode 100644 index e86b8dcb..00000000 --- a/docs/knowledge-base/grid-change-boolean-filter-to-yesno.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Change the boolean operators text in the Grid filtering and the cell value of the column. -description: An example on how to change the default boolean operators text for the Grid and configuring custom cell. -type: how-to -page_title: Set custom text for the boolean operators in the Grid - KendoReact Grid -slug: grid-change-boolean-filter-to-yesno -tags: grid, kendoreact, filter, filtering, boolean -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.9.0
    ProductProgress® KendoReact
    - - -## Description - -I want to change the boolean filter "Is True" and "Is False" with "Yes" and "No". The value in the cells should also show "Yes" and "No" instead of "true" and "false". - -## Solution - -For changing the text for the boolean operators in the Grid, a LocalizationProvider with custom messages can be used. As for the values in the cells, the "cell" property of the column must be set to a custom cell. - -Following is an example demonstrating this approach: - -{% meta id:index height:560 %} -{% embed_file grid/grid-change-boolean-filter-to-yesno/app.jsx preview %} -{% embed_file grid/grid-change-boolean-filter-to-yesno/main.jsx %} -{% embed_file grid/grid-change-boolean-filter-to-yesno/sample-products.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-checkbox-in-view-mode-for-boolean.md b/docs/knowledge-base/grid-checkbox-in-view-mode-for-boolean.md deleted file mode 100644 index fcbeea4c..00000000 --- a/docs/knowledge-base/grid-checkbox-in-view-mode-for-boolean.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Custom cell with CheckBox for editing and view -description: An example on how to create a custom cell for boolean field with CheckBox for editing and viewing in KendoReact Grid. -type: how-to -page_title: Render Disabled CheckBox In View Mode Of A Cell - KendoReact Grid -slug: grid-checkbox-in-view-mode-for-boolean -tags: custom, editing, cell, kendoreact, grid -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
    ProductProgress® KendoReact
    - - -## Description - -How can I display a boolean value in CheckBox in view mode and editable CheckBox when the row is in edit mode. - -## Solution - -Add custom cell for the boolean column and render disabled CheckBox for view mode of the cell and enabled CheckBox when the dataItem is in edit mode. - -Here is an example demonstrating this approach: - -{% meta id height:760 %} -{% embed_file grid/checkbox-in-view-mode-for-boolean/app.jsx preview %} -{% embed_file grid/checkbox-in-view-mode-for-boolean/main.jsx %} -{% embed_file grid/checkbox-in-view-mode-for-boolean/ExternalGridCell.jsx %} -{% embed_file grid/checkbox-in-view-mode-for-boolean/sample-products.jsx %} -{% endmeta %} - -The example is using an extended Grid cell (ExternalGridCell) which adds all class names and attributes to the TD elements and allows changing only the content of the cell. This extended Grid cell is useful for every scenario with custom cells. diff --git a/docs/knowledge-base/grid-checkbox-selection-with-grouping.md b/docs/knowledge-base/grid-checkbox-selection-with-grouping.md deleted file mode 100644 index 068817fa..00000000 --- a/docs/knowledge-base/grid-checkbox-selection-with-grouping.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: How to use checkbox selection in the Grid with enabled grouping -description: An example on how to use checkbox selection with grouping - KendoReact Grid -type: how-to -page_title: Use checkbox selection with grouping - KendoReact Grid -slug: grid-checkbox-selection-with-grouping -tags: grid, kendoreact, selection, grouping -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.9.0
    ProductProgress® KendoReact
    - - -## Description - -I want to use the checkbox selection in a Grid with enabled grouping. - -## Solution - -When a group expression is applied to the Grid's data, the parent items in the data will be group items, so the logic for setting the select field value and the logic for determining the state of the "Select all" checkbox in the header must be different than the logic used without grouping. - -Following is an example demonstrating this approach: - -{% meta id:index height:560 %} -{% embed_file grid/checkbox-selection-with-grouping/app.jsx preview %} -{% embed_file grid/checkbox-selection-with-grouping/main.jsx %} -{% embed_file grid/checkbox-selection-with-grouping/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-collapse-header-column.md b/docs/knowledge-base/grid-collapse-header-column.md deleted file mode 100644 index d3ffba10..00000000 --- a/docs/knowledge-base/grid-collapse-header-column.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Collapse Header Column in Grid -description: An example on how to collapse the columns inside the Grid header. -type: how-to -page_title: Collapse Header Column in Grid | KendoReact Chart -slug: collapse-header-column-in-grid -tags: grid, header, collapse, column -ticketid: 1573785 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.5.0
    ProductProgress® KendoReact
    - - -## Description - -How can I collapse the columns inside the Grid header? - -![Grid Collapse Header Columns](examples/grid/collapse-header-column/grid-collapse-header-columns.gif) - -## Solution - -This can be achieved by toggling a flag variable in the state that will determine whether or not the nested columns will render. - -{% meta id height:560 %} -{% embed_file grid/collapse-header-column/app.jsx preview %} -{% embed_file grid/collapse-header-column/main.jsx %} -{% embed_file grid/collapse-header-column/products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-column-auto-width.md b/docs/knowledge-base/grid-column-auto-width.md deleted file mode 100644 index 60c7d2e4..00000000 --- a/docs/knowledge-base/grid-column-auto-width.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Set the Width of the Column Based on the Content -description: An example on how to set the width of the KendoReact Grid column based on the content. -type: how-to -page_title: Set the Width of the Column Based on the Content - KendoReact Grid -slug: grid-column-auto-width -tags: grid, kendoreact, width, column, auto -ticketid: 1469294 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.0.0
    ProductProgress® KendoReact
    - - -## Description - -How can I set the width of the Grid column based on the content. I want the column width to be set based on the longest value in the column. - -## Solution - -### Using HTML canvas measureText() - -In order to automatically calculate the column width, we can suggest using the Canvas API [measureText](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/measureText) function that can calculate the text width based on the font weight, size, and family. Then we can use that information to dynamically set the width of the column. - -{% meta id:index height:560 %} -{% embed_file grid/auto-width/canvas/app.jsx preview %} -{% embed_file grid/auto-width/canvas/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - -### Using calculate-size - -Another approach would be to use a package called [calculate-size](https://www.npmjs.com/package/calculate-size) or similar which will calculate the size of the text based on the font. - -{% meta id:index height:560 %} -{% embed_file grid/auto-width/calculate-size/app.jsx preview %} -{% embed_file grid/auto-width/calculate-size/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-columnmenu-filter-without-operators.md b/docs/knowledge-base/grid-columnmenu-filter-without-operators.md deleted file mode 100644 index 5bd558ef..00000000 --- a/docs/knowledge-base/grid-columnmenu-filter-without-operators.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Hide the DropDownList with the operators in the columnMenu of the Grid -description: An example on how to show only the filter in the column menu of the Grid without the filter operators. -type: how-to -page_title: Hide The Operators DropDownList From GridColumnMenuFilter In The Column Menu - KendoReact Grid -slug: grid-columnmenu-filter-without-operators -tags: grid, kendoreact, columnmenu, filtering, operators -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - - -## Description - -I want to display columnMenu in the Grid columns without the DropDown for changing the operators. Can I achieve this without a custom filter and re-use the filter input? - -## Solution - -Wrap the GridColumnMenuFilter in a DIV element with specific className and use that class name as a selector to hide all elements within the DIV with ".k-dropdownlist" class. - -Following is an example demonstrating this approach - -{% meta id:index height:360 %} -{% embed_file grid/grid-columnmenu-filter-without-operators/app.jsx preview %} -{% embed_file grid/grid-columnmenu-filter-without-operators/main.jsx %} -{% embed_file grid/grid-columnmenu-filter-without-operators/columnMenu.jsx %} -{% embed_file grid/grid-columnmenu-filter-without-operators/styles.css.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-columnmenu-pass-data-with-context.md b/docs/knowledge-base/grid-columnmenu-pass-data-with-context.md deleted file mode 100644 index 88e7611f..00000000 --- a/docs/knowledge-base/grid-columnmenu-pass-data-with-context.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Pass data to GridColumnMenuCheckboxFilter from Grid context -description: An example on how to pass data to GridColumnMenuCheckboxFilter using React Context. -type: how-to -page_title: Pass data to the column menu GridColumnMenuCheckboxFilter - KendoReact Grid -slug: grid-columnmenu-pass-data-with-context -tags: grid, kendoreact, columnmenu, filtering -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description - -I have the data for the GridColumnMenuCheckboxFilter within the context of the Grid and I want to pass it to the column menu. How can I re-use the data. - -## Solution - -For achieving the desired result the React Context can be used by wrapping it around the Grid component and then accessing the references to the data within the column menu. - -Following is an example demonstrating this approach - -{% meta id:index height:520 %} -{% embed_file grid/grid-columnmenu-pass-data-with-context/app.jsx preview %} -{% embed_file grid/grid-columnmenu-pass-data-with-context/main.jsx %} -{% embed_file grid/grid-columnmenu-pass-data-with-context/columnMenu.jsx %} -{% embed_file grid/grid-columnmenu-pass-data-with-context/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-columnmenucheckboxfilter-with-contains.md b/docs/knowledge-base/grid-columnmenucheckboxfilter-with-contains.md deleted file mode 100644 index 0024e2cc..00000000 --- a/docs/knowledge-base/grid-columnmenucheckboxfilter-with-contains.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Change the GridColumnMenuCheckboxFilter operator to contains -description: An example on how to use the GridColumnMenuCheckboxFilter with contains operator -type: how-to -page_title: Change GridColumnMenuCheckboxFilter Operator To Contains - KendoReact Grid -slug: grid-columnmenucheckboxfilter-with-contains -tags: grid, kendoreact, columnmenu, checkboxfilter, contains -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - - -## Description - -Can I change the filter operator for the GridColumnMenuCheckboxFilter to contains? - -## Solution - -### Using HTML canvas measureText() - -By default the GridColumnMenuCheckboxFilter will use "eq" operator. To change the operator locate the filter descriptor within the onDataStateChange event by using the field name of the column and replace the added operator to "contains" - -Following is an example demonstrating this approach: - -{% meta id:index height:520 %} -{% embed_file grid/grid-columnmenucheckboxfilter-with-contains/app.jsx preview %} -{% embed_file grid/grid-columnmenucheckboxfilter-with-contains/main.jsx %} -{% embed_file grid/grid-columnmenucheckboxfilter-with-contains/columnMenu.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-conditional-scrollbar.md b/docs/knowledge-base/grid-conditional-scrollbar.md deleted file mode 100644 index de029afb..00000000 --- a/docs/knowledge-base/grid-conditional-scrollbar.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Enable Grid scrollbar conditionally based on page size -description: An example on how to conditionally enable Grid's scrollbar -type: how-to -page_title: Conditionally enable Grid's scrollable based on page size - KendoReact Grid -slug: grid-conditional-scrollbar -position: -tags: grid, scrollable, scrollbar, scrolling -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - -## Description -I want to enable the scrollable functionality of the Grid if page size is higher than 10 - -## Solution -This can be achieved by setting the scrollable property of the Grid from a state variable and update its value based on the current page size (either within the onPageChange or within the onDataStateChange event) - -This is an example showcasing this approach: - -{% meta id:index height:540 %} -{% embed_file grid/grid-conditional-scrollbar/app.jsx preview %} -{% embed_file grid/grid-conditional-scrollbar/main.jsx %} -{% embed_file grid/grid-conditional-scrollbar/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-context-menu.md b/docs/knowledge-base/grid-context-menu.md deleted file mode 100644 index f2ae1502..00000000 --- a/docs/knowledge-base/grid-context-menu.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Implement a Context Menu in the Grid -description: "Learn how to add a context menu to a KendoReact Grid." -type: how-to -page_title: Add a Context Menu - KendoReact Grid -slug: grid-context-menu -tags: grid, kendoreact, contextmenu -ticketid: 1422874 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.15.0
    ProductProgress® KendoReact
    - - -## Description - -How to add a context menu to the Grid? - -## Solution - -You can implement a context menu in the Grid by using the [KendoReact Popup component]({% slug overview_popup %}) and then and display it on a right click. - -1. Attach the `onContextMenu` to the Grid rows and pass the row data to the context menu by utilizing the [`rowRender`]({% slug api_grid_gridprops %}#toc-rowRender) property. - - ```tsx-no-run - rowRender = (trElement, dataItem) => { - const trProps = { - ...trElement.props, - onContextMenu: (e) => { - e.preventDefault() - this.handleContextMenuOpen(e, dataItem.dataItem) - } - }; - return React.cloneElement(trElement, { ...trProps }, trElement.props.children); - } - ``` - -2. Define the desired content of the context menu in the Popup. As the elements inside the Popup are custom, they execute different actions depending on the desired functionality. - - ```tsx-no-run - - - - - - - - ``` - -The following example demonstrates the full implementation of the suggested approach. The context menu provides options for moving the rows up and down, and for deleting an item. - -{% meta height:480 %} -{% embed_file grid/context-menu/app.jsx preview %} -{% embed_file grid/context-menu/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-custom-cell-with-selection.md b/docs/knowledge-base/grid-custom-cell-with-selection.md deleted file mode 100644 index cabdcdfa..00000000 --- a/docs/knowledge-base/grid-custom-cell-with-selection.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Use custom cell for a column with enabled selection in the Grid. -description: An example on how to define custom column cell and keep the selection functionality -type: how-to -page_title: Custom Column Cell With Grid Selection - KendoReact Grid -slug: grid-custom-cell-with-selection -tags: grid, kendoreact, custom, cell, selection -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - - -## Description -The row and cell selection stops to work If I define custom cell for a column. - -## Solution -Add the selected class name to the custom cell conditionally based on the "props.isSelected" value. The custom cell should also include the necessary attributes. - -Following is an example demonstrating how to keep the Grid selection functionality with custom cell: - -{% meta height:480 %} -{% embed_file grid/grid-custom-cell-with-selection/app.jsx preview %} -{% embed_file grid/grid-custom-cell-with-selection/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-custom-header-cell-with-sorting-and-columnmenu.md b/docs/knowledge-base/grid-custom-header-cell-with-sorting-and-columnmenu.md deleted file mode 100644 index 205630c2..00000000 --- a/docs/knowledge-base/grid-custom-header-cell-with-sorting-and-columnmenu.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Implement custom headerCell in Grid with enabled sorting and columnMenu. -description: How to define custom headerCell in the Grid with enabled sorting and columnMenu -type: how-to -page_title: Use custom headerCell with enabled sorting and columnMenu - KendoReact Grid -slug: grid-custom-header-cell-with-sorting-and-columnmenu -tags: grid, kendoreact, columnmenu, sorting, headercell -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - - -## Description -I use custom headerCell for one of the Grid columns, but the sorting icon and the column menu are not visible. - -## Solution -Following is an example demonstrating the correct headerCell structure for rendering the sort and the columnMenu icons: - -{% meta height:420 %} -{% embed_file grid/custom-header-cell-with-sorting-and-columnmenu/app.jsx preview %} -{% embed_file grid/custom-header-cell-with-sorting-and-columnmenu/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-date-format.md b/docs/knowledge-base/grid-date-format.md deleted file mode 100644 index f2bce14b..00000000 --- a/docs/knowledge-base/grid-date-format.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Modify the Date Format in the Grid -description: An example on how to format ISO string dates in the KendoReact Grid. -type: how-to -page_title: Change the Date Format - KendoReact Grid -slug: grid-date-format -tags: grid, kendoreact, dates, format -ticketid: 1402874 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version2.9.1
    ProductProgress® KendoReact
    - - -## Description - -How can I change an ISO date string which I have in my KendoReact Grid? Setting a `format` property does not affect the current date format. - -## Solution - -The KendoReact Grid formats only valid JavaScript `date` objects. To achieve the desired scenario, parse the ISO strings to JavaScript dates as soon as they are received from the server and work with the parsed data. This approach will also ensure that even if the filtering is done on the client, it will work. diff --git a/docs/knowledge-base/grid-date-ragne-filter.md b/docs/knowledge-base/grid-date-ragne-filter.md deleted file mode 100644 index 8582d60d..00000000 --- a/docs/knowledge-base/grid-date-ragne-filter.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Create a Date-Range Filter in the Grid -description: An example on how to create a date-range filter in the KendoReact Grid. -type: how-to -page_title: Make a Date-Range Filter in the KendoReact Grid - KendoReact Grid -slug: grid-date-range-filter -tags: grid, kendoreact, dates, filter -ticketid: 1402875 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.5.0
    ProductProgress® KendoReact
    - - -## Description - -How can I filter date ranges in the Grid. - -Also, how to make Grid custom range filter working with Odata and show default value and a different format? - -## Solution - -This requires using the [filterCell]({% slug api_grid_gridcolumnprops %}#toc-filterCell) property of the Grid column to add two DatePickers/DateInputs that will allow the user to select a start and an end date. The format can be changed by configuring the [format]({% slug api_dateinputs_datepickerprops %}#toc-format). Use the [defaultValue]({% slug api_dateinputs_datepickerprops %}#toc-defaultValue) to pass a default value for the custom DatePicker component. - -{% meta height:450 %} -{% embed_file grid/date-range-filter/app.jsx preview %} -{% embed_file grid/date-range-filter/main.jsx %} -{% embed_file shared/shared-sample-products.js %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-disable-duplicate-grouping.md b/docs/knowledge-base/grid-disable-duplicate-grouping.md deleted file mode 100644 index 8371613f..00000000 --- a/docs/knowledge-base/grid-disable-duplicate-grouping.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Only allow unique grouping in the Grid -description: An example on how to only allow unique grouping for the KendoReact Grid. -type: how-to -page_title: Unique grouping - KendoReact Grid -slug: grid-unique-grouping -tags: group, grid, unique, duplicate -ticketid: 1617400 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.16.1
    ProductProgress® KendoReact
    - - -## Description - -How can I disable duplicate grouping for the Data Grid? - -## Solution - -In the `onGroupChange` event handler, you can check if the newly added group exists in the `group` state variable. In addition, when the group is added, `event.nativeEvent` is undefined. Since the `onGroupChange` event is also responsible to remove groups (in that case `event.nativeEvent` is defined), therefore, set the `group` and `resultState` only when `event.nativeEvent` is defined and `groupExists` equals false. - -This is an example demonstrating the implementation: - -{% meta id:index height:680 %} -{% embed_file grid/unique-groups/app.jsx preview %} -{% embed_file grid/unique-groups/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-disable-reordering.md b/docs/knowledge-base/grid-disable-reordering.md deleted file mode 100644 index 2e1f118b..00000000 --- a/docs/knowledge-base/grid-disable-reordering.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Disable reordering of a specific column of the KendoReact Grid -description: An example on how to disable the reordering of a column of the KendoReact Grid. -type: how-to -page_title: Grid disable reordering - KendoReact DateRangePicker -slug: grid-disable-reordering -tags: grid, reodering, column, disable, reorder -ticketid: 1588131 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version6.2.0
    ProductProgress® KendoReact
    - - -## Description -I want to disable the reordering of one or more columns of the KendoReact Grid. - - -## Solution -The [orderIndex]({% slug api_grid_gridcolumnprops %}#toc-orderIndex) property to the GridColumn component allows you to restrict the column position at a specific place. For example, if you set the `orderIndex` prop of the first column to `0`, it will not be possible to neither drag it to another position, or drag another column to it. - -The following example demonstrates the above approach: - -{% meta id:index height:560 %} -{% embed_file grid/grid-disable-reordering/app.jsx preview %} -{% embed_file grid/grid-disable-reordering/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-disable-selection-for-rows-conditionally.md b/docs/knowledge-base/grid-disable-selection-for-rows-conditionally.md deleted file mode 100644 index 817ea8a1..00000000 --- a/docs/knowledge-base/grid-disable-selection-for-rows-conditionally.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Disable checkbox selection for Grid rows conditionally. -description: An example on how to disable the checkbox selection for particular rows in the Grid. -type: how-to -page_title: Disable checkbox selection for specific rows - KendoReact Grid -slug: grid-disable-selection-for-rows-conditionally -tags: grid, kendoreact, selection, checkboxes -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - - -## Description - -I want to disable the checkbox selection for specific rows based on a value in the data item - -## Solution - -Use the cellRender of the Grid to modify the TD element for the select column when the condition for disabling the checkbox is met. Add additional logic for the "Select all" checkbox in the header to exclude the disabled items. - -Following is an example with the described approach: - -{% meta height:450 %} -{% embed_file grid/disable-selection-for-rows-conditionally/app.jsx preview %} -{% embed_file grid/disable-selection-for-rows-conditionally/main.jsx %} -{% embed_file grid/disable-selection-for-rows-conditionally/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-dropdown-filter-for-array-field.md b/docs/knowledge-base/grid-dropdown-filter-for-array-field.md deleted file mode 100644 index d516e97c..00000000 --- a/docs/knowledge-base/grid-dropdown-filter-for-array-field.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Using DropDownList filter for a field in the Grid containing an array. -description: An example on how to filter array field with a DropDownList custom filter. -type: how-to -page_title: Create custom DropDownList filter for array field - KendoReact Grid -slug: grid-dropdown-filter-for-array-field -tags: grid, kendoreact, filter, array -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - - -## Description - -I have a field in the Grid that contains an array. I want to add a DropDownList filter for that column that will filter the array values. - -## Solution - -The first step is to create a custom filter with a DropDownList for the array column through the "filterCell" property of the column. The selected value from the DropDownList will be added to the filter expressions, but since there is no built-in operator that will search within an array field, a custom operator must be defined. Within the onDataStateChange event of the Grid, find and replace the filter operator for the array field. - -Following is an example with the described approach: - -{% meta height:450 %} -{% embed_file grid/dropdown-filter-for-array-field/app.jsx preview %} -{% embed_file grid/dropdown-filter-for-array-field/main.jsx %} -{% embed_file grid/dropdown-filter-for-array-field/dropdownFilterCell.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-edit-one-item-at-a-time.md b/docs/knowledge-base/grid-edit-one-item-at-a-time.md deleted file mode 100644 index 26820878..00000000 --- a/docs/knowledge-base/grid-edit-one-item-at-a-time.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Edit one item in the Grid at a time with inline editing -description: An example on how to disable the edit/add of items while an item is edited -type: how-to -page_title: Prevent editing or adding new items while an item is opened for editing - KendoReact Grid -slug: grid-edit-one-item-at-a-time -tags: grid, editing, inline -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description -I want to prevent multiple items to be opened for editing when inline edit mode is used for the Grid. The Add button should also be disabled if there is an item opened for editing. - -## Solution -This could be achieved by setting the disabled property of the command buttons in the CommandCell for the inline editing. The Add button for new items can be controlled through the disabled property as well. - -For tracking which item will have enabled buttons we add disableEdit property to all items that are not being edited at the time and we use that value within the CommandCell for disabling the buttons. - -This is an example showcasing how to limit the value: - -{% meta height:580 %} -{% embed_file grid/grid-edit-one-item-at-a-time/app.jsx preview %} -{% embed_file grid/grid-edit-one-item-at-a-time/main.jsx %} -{% embed_file grid/grid-edit-one-item-at-a-time/myCommandCell.jsx %} -{% embed_file grid/grid-edit-one-item-at-a-time/sample-products.jsx %} -{% embed_file grid/grid-edit-one-item-at-a-time/services.js %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-ellipsis-data-cell.md b/docs/knowledge-base/grid-ellipsis-data-cell.md deleted file mode 100644 index 5b2a4315..00000000 --- a/docs/knowledge-base/grid-ellipsis-data-cell.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Add ellipsis to data cells in Grid after specific number of lines -description: An example on how to show ellipsis in data cells for long text. -type: how-to -page_title: Show ellipsis in data cells for long text after specific number of lines - KendoReact Grid -slug: grid-ellipsis-data-cell -tags: grid, appearance, cell, ellipsis -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description -How to limit the text in data cells to 2 lines and show ellipsis for longer text - -## Solution -This can be achieved by wrapping the content of the data cells in a DIV element with specific class name that can then be customized to show only two lines and ellipsis for longer text. Adding the DIV element can be achieved within the cellRender of the Grid. - -This is an example showcasing how to limit the value: - -{% meta height:600 %} -{% embed_file grid/grid-ellipsis-data-cell/app.jsx preview %} -{% embed_file grid/grid-ellipsis-data-cell/main.jsx %} -{% embed_file grid/grid-ellipsis-data-cell/styles.css %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-expand-with-flat-data.md b/docs/knowledge-base/grid-expand-with-flat-data.md deleted file mode 100644 index 11d6004b..00000000 --- a/docs/knowledge-base/grid-expand-with-flat-data.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Implement expand/collapse in Grid with flat data without grouping -description: An example on how to create custom expand/collapse with flat data. -type: how-to -page_title: Implement custom expand/collapse logic for flat data - KendoReact Grid -slug: grid-expand-with-flat-data -tags: grid, expand, hierarchy -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description -I have flat data and I want to add expand/collapse functionality for hiding a given set of items by some custom condition. - -## Solution -Add a column with custom "cell" for rendering the expand/collapse icons. Within the Grid's rowRender the 'child' items visibility can be determined by the custom logic in which the items are 'grouped'. - -Following is an example demonstrating how to simulate hierarchy with flat data where the order of the items in the 'data' are in the correct order and the parent items have ParentID equal to 0. - -{% meta height:480 %} -{% embed_file grid/expand-with-flat-data/app.jsx preview %} -{% embed_file grid/expand-with-flat-data/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-export-csv.md b/docs/knowledge-base/grid-export-csv.md deleted file mode 100644 index f71d3fb8..00000000 --- a/docs/knowledge-base/grid-export-csv.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Export Grid data to a CSV format -description: An example on how to export the Grid data to a CSV format -type: how-to -page_title: Grid CSV Export - KendoReact Grid -slug: grid-csv-export -tags: grid, csv, export -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version6.1.1
    ProductProgress® KendoReact
    - -## Description -I want to export the Grid data to a CSV format. Currently, the Grid does not have built-in functionality to achieve this. - -## Solution -You can export the Grid data to a CSV format using the [react-csv](https://www.npmjs.com/package/react-csv) library or a similar one which downloads the json data to CSV. - -This is an example showcasing this approach: - -{% meta id:index height:700 %} -{% embed_file grid/grid-csv-export/app.jsx preview %} -{% embed_file grid/grid-csv-export/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-external-dropdownlist-filter.md b/docs/knowledge-base/grid-external-dropdownlist-filter.md deleted file mode 100644 index b05576d5..00000000 --- a/docs/knowledge-base/grid-external-dropdownlist-filter.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Filter KendoReact Grid with external DropDownList -description: An example on how to use external component for filtering Grid's data -type: how-to -page_title: Using external DropDownList for filtering data - KendoReact Grid -slug: grid-external-dropdownlist-filter -position: -tags: grid, filtering -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - -## Description -I want to filter the Grid from an external DropDownList bound to one of the fields. - -## Solution -All data operations in the Grid are handled manually, so including a filter expression in the Grid's DataState within the onChange event of an external DropDownList can be used for filtering the data. - -This is an example showcasing this approach: - -{% meta id:index height:700 %} -{% embed_file grid/grid-external-dropdownlist-filter/app.jsx preview %} -{% embed_file grid/grid-external-dropdownlist-filter/main.jsx %} -{% embed_file grid/grid-external-dropdownlist-filter/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-filtering-api.md b/docs/knowledge-base/grid-filtering-api.md deleted file mode 100644 index ce50afe7..00000000 --- a/docs/knowledge-base/grid-filtering-api.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Filter KendoReact Grid with data from an API -description: An example on how to filter the Grid data that is passed from an API -type: how-to -page_title: Filtering the Grid with data from an API - KendoReact Grid -slug: grid-filtering-api -tags: grid, filtering, api -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version7.3.0
    ProductProgress® KendoReact
    - -## Description - -How do I filter the Grid using `useEffect` with dummy API endpoint using JSON place holder? - -## Solution - -This can be achieved by fetching the data inside the `useEffect` hook and then filtering it using the `filterBy` helper function and passing the filtered collection to the [`data`]({% slug api_grid_gridprops %}#toc-data) prop. - -{% meta id:index height:700 %} -{% embed_file grid-filtering-api/app.tsx preview %} -{% embed_file grid-filtering-api/main.tsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-filtering-disable-diacritics.md b/docs/knowledge-base/grid-filtering-disable-diacritics.md deleted file mode 100644 index 5b1692ea..00000000 --- a/docs/knowledge-base/grid-filtering-disable-diacritics.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Ignore diacritics in the Grid filtering -description: An example on how to ignore diacritics when filtering the KendoReact Grid. -type: how-to -page_title: Ignore diacritics - KendoReact Grid -slug: grid-ignore-diacritics -tags: diacritics, grid, ignore -ticketid: 1617433 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.16.1
    ProductProgress® KendoReact
    - - -## Description - -How can I ignore the diacritics in the Grid filtering? - -## Solution - -You can achieve this by rendering a custom filter cell and normalizing the passed value. First, pass a custom filter cell to the `filterCell` prop of a GridColumn. In the custom filter cell, render the needed component which will apply the filtering, and in `props.onChange` which controls the input value, remove the diacritics from `event.target.value` using [normalize](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize). - -This is an example demonstrating this implementation: - -{% meta id:index height:560 %} -{% embed_file grid/ignore-diacritics/app.jsx preview %} -{% embed_file grid/ignore-diacritics/main.jsx %} -{% embed_file grid/ignore-diacritics/inputFilterCell.jsx %} -{% embed_file shared/shared-sample-products.js %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-fix-editors-popup-position-issue.md b/docs/knowledge-base/grid-fix-editors-popup-position-issue.md deleted file mode 100644 index 83739d79..00000000 --- a/docs/knowledge-base/grid-fix-editors-popup-position-issue.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Fix Grid editors Popup position issue on scrolling -description: An example on how to fix the Popup position issue on scrolling in Grid editors -type: how-to -page_title: Fix Editors Popup Position Issue On Scrolling - KendoReact Grid -slug: grid-fix-editors-popup-position-issue -position: -tags: grid, editors, scrolling, issue -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - -## Description -Opening a popup of any editor in the Grid and scrolling it causes the popup to be shown outside of the scrollable container. - -## Solution -The issue in question is caused by the fact that all Popup components are rendered in the "body" element, which causes them to be displayed outside of the scrollable container of the Grid on scrolling. To avoid this, wrap the Grid in PopupPropsContext and change the "appendTo" property to all Popup components within the data container of the Grid to the scrollable container. - -This is an example showcasing this approach: - -{% meta id:index height:760 %} -{% embed_file grid/fix-editors-popup-position-issue/app.jsx preview %} -{% embed_file grid/fix-editors-popup-position-issue/main.jsx %} -{% embed_file grid/fix-editors-popup-position-issue/myCommandCell.jsx %} -{% embed_file grid/fix-editors-popup-position-issue/myDropDownCell.jsx %} -{% embed_file grid/fix-editors-popup-position-issue/services.js %} -{% embed_file shared/shared-sample-products.js %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-hide-expand-icon-conditionally.md b/docs/knowledge-base/grid-hide-expand-icon-conditionally.md deleted file mode 100644 index a49d72b4..00000000 --- a/docs/knowledge-base/grid-hide-expand-icon-conditionally.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Hide conditionally the expand icon for some items -description: An example on how to conditionally hide the expand icon for some items -type: how-to -page_title: Hide The Expand Button For DataItems Conditionally - KendoReact Grid -slug: grid-hide-expand-icon-conditionally -position: -tags: grid, details, expand, hide -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - -## Description -I want to hide the expand icon for some rows based on a condition from the dataItems values. - -## Solution -Within the cellRender of the Grid check if the field for the cell is the expand field and use the props.dataItem to return an empty TD element if the condition for the expand icon is not met. - -This is an example showcasing this approach: - -{% meta id:index height:660 %} -{% embed_file grid/grid-hide-expand-icon-conditionally/app.jsx preview %} -{% embed_file grid/grid-hide-expand-icon-conditionally/main.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-hide-grouped-columns.md b/docs/knowledge-base/grid-hide-grouped-columns.md deleted file mode 100644 index a480ff23..00000000 --- a/docs/knowledge-base/grid-hide-grouped-columns.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Hide grouped columns from the Grid -description: An example on how hide grouped columns -type: how-to -page_title: Hiding grouped columns - KendoReact Grid -slug: grid-hide-grouped-columns -position: -tags: grid, grouping -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - -## Description -I want to hide the columns that I have added to the grouping of the Grid - -## Solution -Columns in the Grid can be dynamically removed if we have the columns collection stored in the state and we have a way for determining which columns should be added to the columns collection of the Grid. In this example we are adding "show" property to the columns and its value is set to false if within the onDataStateChange event of the Grid there is a group expression with the field of the column. - -This is an example showcasing this approach: - -{% meta id:index height:760 %} -{% embed_file grid/grid-hide-grouped-columns/app.jsx preview %} -{% embed_file grid/grid-hide-grouped-columns/main.jsx %} -{% embed_file grid/grid-hide-grouped-columns/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-horizontal.md b/docs/knowledge-base/grid-horizontal.md deleted file mode 100644 index dcb44963..00000000 --- a/docs/knowledge-base/grid-horizontal.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: How to create a horizontal Grid. -description: An example on how to display a horizontal KendoReact Grid. -type: how-to -page_title: Horizontal Grid - KendoReact Grid -slug: grid-horizontal -tags: grid, horizontal, transpose, vertical -ticketid: 1608513 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.17.0
    ProductProgress® KendoReact
    - - -## Description - -I want to create a horizontal Grid where the column headers are displayed in the first column on separate rows. In addition, the corresponding cell data of each column header should be displayed on the same row of the header. - -## Solution - -The Grid is designed to display the data in a vertical way but you can still achieve this by transforming the data (by transposing it) in a format expected by the Grid. - -The following example showcases this approach: - -{% meta height:760 %} -{% embed_file grid/transpose-data/app.jsx preview %} -{% embed_file grid/transpose-data/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-limit-numeric-filter-value.md b/docs/knowledge-base/grid-limit-numeric-filter-value.md deleted file mode 100644 index 5f31567f..00000000 --- a/docs/knowledge-base/grid-limit-numeric-filter-value.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Limit Value in a Numeric Filter -description: An example on how to limit the value in the numeric filter of the KendoReact NumericTextBox. -type: how-to -page_title: Limit the Value in a Numeric Filter - KendoReact NumericTextBox -slug: limit-numeric-filter-value -tags: grid, NumericTextBox, filter, limit value -ticketid: 1547408 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version4.13.0
    ProductProgress® KendoReact
    - - -## Description -How to limit the value in a numeric filter cell in order to prevent negative values? - -## Solution -Creating a custom component that uses NumericTextBox as a filter and setting the min prop to zero. - -This is an example showcasing how to limit the value: - -{% meta height:480 %} -{% embed_file grid/limit-numeric-filter-value/app.jsx preview %} -{% embed_file grid/limit-numeric-filter-value/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-loading-indicator.md b/docs/knowledge-base/grid-loading-indicator.md deleted file mode 100644 index 710a301f..00000000 --- a/docs/knowledge-base/grid-loading-indicator.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Render a Loading Indicator -description: "Learn how to implement a loading indicator panel for showing the loading state of the KendoReact Grid." -type: how-to -page_title: Render a Loading Indicator - KendoReact Grid -slug: grid-loading-indicator -tags: grid, kendoreact, loading -ticketid: 1402875 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.5.0
    ProductProgress® KendoReact
    - - -## Description - -How to show a loading indication when loading data. - -## Solution - -### Rendering Loading Indicator - -When the KendoReact Data Grid contains a huge amount of records and depending on the browser, the component might take longer to load its data. - -In such cases, a loading indicator is suitable to indicate that the Grid is properly functioning and that its data will soon be displayed. - -The following example demonstrates how to render a loading indicator once a request is made and hide it when the request is finished successfully. - -{% meta id:loading-indicator height:650 %} -{% embed_file grid/odata-server-operations/app.jsx preview %} -{% embed_file grid/odata-server-operations/main.jsx %} -{% embed_file shared/shared-products-loader.jsx %} -{% endmeta %} - -#### Setup - -1. Create a component that will manage the data operations and the requests. This component will separate the data request and response logic from the declaration of the Grid. - - ```jsx-no-run - - - - dataReceived = (products) => { - this.setState({ - ...this.state, - products: products - }); - } - ``` - -1. Inside the ProductLoader component, indicate to the Grid when to display the loading indicator. The time when the loading indicator will be rendered depends on the logic of the application. - - ```jsx-no-run - this.pending = toODataString(this.props.dataState); - fetch(this.baseUrl + this.pending, this.init) - .then(response => response.json()) - .then(json => { - this.lastSuccess = this.pending; - this.pending = ''; - if (toODataString(this.props.dataState) === this.lastSuccess) { - this.props.onDataReceived.call(undefined, { - data: json.value, - total: json['@odata.count'] - }); - } else { - this.requestDataIfNeeded(); - } - }); - } - ``` - - ```jsx-no-run - render() { - this.requestDataIfNeeded(); - return this.pending && ; - } - ``` - -1. Create a component that will show the `k-loading-mask` over the Grid container. - - ```jsx-no-run - class LoadingPanel extends React.Component { - render() { - const loadingPanel = ( -
    - Loading -
    -
    -
    - ); - - const gridContent = document && document.querySelector('.k-grid-content'); - return gridContent ? ReactDOM.createPortal(loadingPanel, gridContent) : loadingPanel; - } - } - ``` diff --git a/docs/knowledge-base/grid-lock-row-headers.md b/docs/knowledge-base/grid-lock-row-headers.md deleted file mode 100644 index 61e34ea3..00000000 --- a/docs/knowledge-base/grid-lock-row-headers.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Dynamically Lock Row Section Headers -description: An example on how to dynamically lock row based on a data group in the KendoReact Grid. -type: how-to -page_title: Dynamically Lock Row Section Headers - KendoReact Grid -slug: grid-lock-row-headers -tags: grid, kendoreact, dates, format -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.10.0
    ProductProgress® KendoReact
    - - -## Description - -How can I add a locked section header that changes when I scroll through the data similar to the ComboBox grouping headers. - -## Solution - -This will required the following: - -1. The section/header rows have to be part of the data. -1. We can add a field in those data items and lock the rows based on that. The locked row of the current section/group will be locked at the top. - -> This approach is working with flat data and grouping on only one level. As the section/group data is part of the flat data we have to filter it based on that section value in order to collapse/expand the sections. - -The following example showcase this in action: - -{% meta id height:760 %} -{% embed_file grid/lock-row-headers/app.jsx preview %} -{% embed_file grid/lock-row-headers/main.jsx %} -{% embed_file shared/shared-products-with-sections.json %} -{% endmeta %} - diff --git a/docs/knowledge-base/grid-merge-cells-and-rows-data.md b/docs/knowledge-base/grid-merge-cells-and-rows-data.md deleted file mode 100644 index 99ac57a7..00000000 --- a/docs/knowledge-base/grid-merge-cells-and-rows-data.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Merge Rows in the Grid -description: An example on how to merge cells and rows data in the KendoReact Grid. -type: how-to -page_title: Merge Rows and Cells Data in the Grid - KendoReact Grid -slug: merge-row-and-cell-in-the-grid -tags: grid, rows, merge, cells -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version7.0.2
    ProductProgress® KendoReact
    - - -## Description - -How can I merge or group duplicate cells and rows data in the KendoReact Data Grid? - -## Solution - -For simple scenarios where the data needs to be merged for single column, rowSpan can be set to the TD elements within the cellRender of the Grid. However, due to limitations in how HTML table can rowSpan/colSpan, it is not possible to have different colSpan for rows that already have set rowSpan, so using colSpan and rowSpan for merging duplicate rows and cells data will not be possible and different approach must be used. - -For this scenario, use a [`cellRender`]({% slug api_grid_gridprops %}#toc-cellrender) and compare the previous cell and previous row data to remove the content of the cell if it duplicate. You can also add different colors of the cell based on the values (suitable for boolean values for example), so they can be distinguished visually. - -{% meta id:index height:760 %} -{% embed_file grid/merge-rows-and-cells/app.jsx preview %} -{% embed_file grid/merge-rows-and-cells/main.jsx %} -{% embed_file grid/merge-rows-and-cells/products.json %} -{% endmeta %} - \ No newline at end of file diff --git a/docs/knowledge-base/grid-multiple-functionalities.md b/docs/knowledge-base/grid-multiple-functionalities.md deleted file mode 100644 index b75e9bae..00000000 --- a/docs/knowledge-base/grid-multiple-functionalities.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Add Paging, Sorting, and Filtering to a Grid with Form-Editing Features -description: An example of how to have the pagination, sorting, and filtering functionalities of a KendoReact Grid with form-editing features. -type: how-to -page_title: Have Paging, Sorting, and Filtering Functionalities in a Grid with Form-Editing Features - KendoReact Grid -slug: grid-multiple-functionalities -tags: grid, kendoreact, paging, sorting, filtering, page, sort, filter, form, edit -ticketid: 1512657 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.6.0
    ProductProgress® KendoReact
    - - -## Description - -How can I have paging, sorting and filtering functionality of a Grid with form editing features? - -## Solution - -This can be achieved by building upon [`this demo`]({% slug external_editing_grid %}) of our documentation which showcases how to achieve a Grid with form editing features. - -By following the steps in the articles in our documentation regarding how to apply [`sorting`]({% slug sorting_grid %}#toc-getting-started), [`filtering`]({% slug filtering_grid %}#toc-getting-started) and [`paging`]({% slug paging_grid %}#toc-getting-started), those functionalities are then included to result in the following scenario shown in the demo below. - - - -{% meta id height:650 %} -{% embed_file grid/multiple-functionalities/app.jsx preview %} -{% embed_file grid/multiple-functionalities/main.jsx %} -{% embed_file grid/multiple-functionalities/editForm.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-multiselect-filter-cell.md b/docs/knowledge-base/grid-multiselect-filter-cell.md deleted file mode 100644 index b14bf683..00000000 --- a/docs/knowledge-base/grid-multiselect-filter-cell.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Add custom filterCell with MultiSelect filter in Grid -description: An example on how to create MultiSelect filter with filterCell for a column in KendoReact Grid. -type: how-to -page_title: Add MultiSelect Filter By Customizing The FilterCell Of A Column - KendoReact Grid -slug: grid-multiselect-filter-cell -tags: custom, filtering, filtercell, kendoreact, grid -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
    ProductProgress® KendoReact
    - - -## Description - -How can I use MultiSelect for filtering a column? - -## Solution - -Configure custom filterCell for the column where you want to use the MultiSelect. Either pass the data that will populate the MultiSelect from the main component or load it within the custom filterCell. Since there is no built-in filter operator for handling the array with multiple value that the MultiSelect will return, a custom operator must be defined. - -Here is an example demonstrating this approach: - -{% meta id height:650 %} -{% embed_file grid/multiselect-filter-cell/app.jsx preview %} -{% embed_file grid/multiselect-filter-cell/main.jsx %} -{% embed_file grid/multiselect-filter-cell/multiSelectFilterCell.jsx %} -{% embed_file grid/multiselect-filter-cell/products.json %} -{% endmeta %} - diff --git a/docs/knowledge-base/grid-paste-from-excel.md b/docs/knowledge-base/grid-paste-from-excel.md deleted file mode 100644 index c18f4a4a..00000000 --- a/docs/knowledge-base/grid-paste-from-excel.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Paste Data From Excel -description: An example on how to paste data from Excel in the KendoReact Grid. -type: how-to -page_title: Paste Data From Excel - KendoReact Grid -slug: grid-paste-from-excel -tags: grid, kendoreact, excel, paste -ticketid: 1481168 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.15.0
    ProductProgress® KendoReact
    - - -## Description - -I need to provide mechanism for pasting data into my KendoReact Grid, from Excel sheets. - -## Solution - -This will require wrapping the Grid in a div element and attaching an `onPaste` event. Then on that event: -1. Take the data. -1. Transform it into JSON based on the Grid fields. -1. Set that JSON array as Grid data. - -This can be seen in the following example: - -{% meta id:index height:700 %} -{% embed_file grid/paste-from-excel/app.jsx preview %} -{% embed_file grid/paste-from-excel/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-pdf-export-watermark.md b/docs/knowledge-base/grid-pdf-export-watermark.md deleted file mode 100644 index 8647410f..00000000 --- a/docs/knowledge-base/grid-pdf-export-watermark.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Export Grid Data With Watermark -description: An example on how to export to PDF the Grid data with a watermark -type: how-to -page_title: Export Grid Data With Watermark - KendoReact Grid -slug: grid-pdf-export-watermark -position: -tags: grid, export, PDF, watermark -ticketid: 1580886 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.5.0
    ProductProgress® KendoReact
    - -## Description -I want my exported PDF document to have a watermark. - -## Solution -This can be achieved by using the drawDom and exportPDF from the @progress/kendo-drawing package and then passing a template. - -This is an example showcasing this approach: - -{% meta id:index height:500 %} -{% embed_file grid/grid-pdf-export-with-watermark/app.jsx preview %} -{% embed_file grid/grid-pdf-export-with-watermark/main.jsx %} -{% embed_file grid/grid-pdf-export-with-watermark/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-progressbar-cell.md b/docs/knowledge-base/grid-progressbar-cell.md deleted file mode 100644 index 998e5d45..00000000 --- a/docs/knowledge-base/grid-progressbar-cell.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Add ProgressBar to Grid cell -description: An example on how to display a progress bar in KendoReact Grid cell -type: how-to -page_title: Add ProgressBar cell to the Grid - KendoReact Grid -slug: grid-progressbar-cell -position: -tags: grid, cell, progressbar, customization -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - -## Description -I want to add ProgressBar component as a custom cell in the Grid. - -## Solution -This can be achieved by defining custom cell for the column and rendering a ProgressBar component with the value from the data item for that column. For using the ProgressBar the @progress/kendo-react-progressbars package must be included. - -This is an example showcasing this approach: - -{% meta id:index height:500 %} -{% embed_file grid/grid-progressbar-cell/app.jsx preview %} -{% embed_file grid/grid-progressbar-cell/main.jsx %} -{% embed_file grid/grid-progressbar-cell/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-remove-select-all.md b/docs/knowledge-base/grid-remove-select-all.md deleted file mode 100644 index 12f4ff05..00000000 --- a/docs/knowledge-base/grid-remove-select-all.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Remove the "Select all" checkbox in the Grid's header for checkbox selection -description: An example on how to remove the "Select all" checkbox in the header -type: how-to -page_title: Remove the "Select all" checkbox in the header - KendoReact Grid -slug: grid-remove-select-all -position: -tags: grid, selection, checkbox -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - -## Description -I want to remote the "Select all" checkbox in the Grid's header when using checkbox selection - -## Solution -Handle the "headerCellRender" of the Grid to customize the header cells and if the "props.field" is the select field, return an empty TD element with the default properties only. For all of the other fields, return the default TD element. - -This is an example showcasing this approach: - -{% meta id:index height:500 %} -{% embed_file grid/remove-select-all/app.jsx preview %} -{% embed_file grid/remove-select-all/main.jsx %} -{% embed_file grid/remove-select-all/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-save-scroll-position-in-tabstrip.md b/docs/knowledge-base/grid-save-scroll-position-in-tabstrip.md deleted file mode 100644 index 3f99e66d..00000000 --- a/docs/knowledge-base/grid-save-scroll-position-in-tabstrip.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Save the scroll position of the Grid placed within a TabStrip -description: An example on how to store and restore the scroll position of a Grid placed inside a TabStrip -type: how-to -page_title: Save And Restore The Scroll Position - KendoReact Grid -slug: grid-save-scroll-position-in-tabstrip -position: -tags: grid, scroll, tabstrip, scrolling -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.13.1
    ProductProgress® KendoReact
    - -## Description -I have a Grid placed in TabStrip, but after changing the tabs, the scroll position of the Grid is lost. How can I save and restore it? - -## Solution -For saving the scroll position, handle the onScroll event of the Grid and save the scrollTop value of the scrollable container (ev.nativeEvent.target.scrollTop). Then, within React.useEffect, every time when the selected tab of the TabStrip is changed, either set the scrollTop position of the scrollable container (to restore the exact same position) or use the scrollIntoView method of the Grid's API to restore the scroll position to the same item. For the second approach, set the rowHeight of the Grid and using the scrollTop value and the rowHeight value you will be able to determine which row index must be passed to the scrollIntoView method. - -This is an example showcasing this approach: - -{% meta id:index height:500 %} -{% embed_file grid/save-scroll-position-in-tabstrip/app.jsx preview %} -{% embed_file grid/save-scroll-position-in-tabstrip/main.jsx %} -{% embed_file grid/save-scroll-position-in-tabstrip/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-scheduler-drag-and-drop-mobile.md b/docs/knowledge-base/grid-scheduler-drag-and-drop-mobile.md deleted file mode 100644 index 189bf4ea..00000000 --- a/docs/knowledge-base/grid-scheduler-drag-and-drop-mobile.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Drag and Drop Items From the KendoReact Grid to the KendoReact Scheduler -description: An example on how to drag and drop items from the KendoReact Grid to the KendoReact Scheduler. -type: how-to -page_title: Drag and Drop Items From the KendoReact Grid to the KendoReact Scheduler - KendoReact Grid KendoReact Scheduler -slug: grid-scheduler-drag-and-drop -tags: grid, kendoreact, scheduler, drag, drop -ticketid: 1478702 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version6.0.2
    ProductProgress® KendoReact
    - - -## Description - -Looking for a drag and drop between KendoReact Grid and KendoReact Scheduler. I want to transfer items from the Grid to the Scheduler. - -## Solution - -This will required the following setup: - -1. Use the [rowRender](https://www.telerik.com/kendo-react-ui/components/grid/api/GridProps/#toc-rowrender) prop of the Grid to make the row draggable and to get the currently dragged item. -1. Then we need add a onDropEvent to the Scheduler container using the [component ref](https://reactjs.org/docs/refs-and-the-dom.html#creating-refs). -1. When the user drops an item we add it to the Scheduler data updating the state. - -{% meta id:index height:900 %} -{% embed_file scheduler/dnd-from-grid/app.jsx preview %} -{% embed_file scheduler/dnd-from-grid/main.jsx %} -{% embed_file shared/shared-data.js %} -{% endmeta %} - -## Enabling the drag and drop on mobile devices - -This can be achieved by using the KendoReact [Drag&Drop](https://www.telerik.com/kendo-react-ui/components/utils/drag-and-drop/) utility with a custom `DragHandleCell` with touchAction set to `none`: - -{% meta id:index height:900 %} -{% embed_file scheduler/dnd-from-grid-mobile/draggable/app.jsx preview %} -{% embed_file scheduler/dnd-from-grid-mobile/draggable/main.jsx %} -{% embed_file scheduler/dnd-from-grid-mobile/draggable/drag-handle-cell.jsx %} -{% embed_file scheduler/dnd-from-grid-mobile/draggable/draggable-row.jsx %} -{% embed_file shared/shared-data.js %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - - -The native Drag & Drop API does not support touch events by default. It is possible to enable the drag and drop functionality on mobile devices by using a polyfill as well: - -{% meta id:index height:900 %} -{% embed_file scheduler/dnd-from-grid-mobile/polyfill/app.jsx preview %} -{% embed_file scheduler/dnd-from-grid-mobile/polyfill/main.jsx %} -{% embed_file shared/shared-data.js %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-scheduler-drag-and-drop.md b/docs/knowledge-base/grid-scheduler-drag-and-drop.md deleted file mode 100644 index 382dbb56..00000000 --- a/docs/knowledge-base/grid-scheduler-drag-and-drop.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Drag and Drop Items From the KendoReact Grid to the KendoReact Scheduler -description: An example on how to drag and drop items from the KendoReact Grid to the KendoReact Scheduler. -type: how-to -page_title: Drag and Drop Items From the KendoReact Grid to the KendoReact Scheduler - KendoReact Grid KendoReact Scheduler -slug: grid-scheduler-drag-and-drop -tags: grid, kendoreact, scheduler, drag, drop -ticketid: 1478702 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.15.0
    ProductProgress® KendoReact
    - - -## Description - -Looking for a drag and drop between KendoReact Grid and KendoReact Scheduler. I want to transfer items from the Grid to the Scheduler. - -## Solution - -This will required the following setup: - -1. Use the [rowRender](https://www.telerik.com/kendo-react-ui/components/grid/api/GridProps/#toc-rowrender) prop of the Grid to make the row draggable and to get the currently dragged item. -1. Then we need add a onDropEvent to the Scheduler container using the [component ref](https://reactjs.org/docs/refs-and-the-dom.html#creating-refs). -1. When the user drops an item we add it to the Scheduler data updating the state. - -{% meta id:index height:900 %} -{% embed_file scheduler/dnd-from-grid/app.jsx preview %} -{% embed_file scheduler/dnd-from-grid/main.jsx %} -{% embed_file shared/shared-data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-search.md b/docs/knowledge-base/grid-search.md deleted file mode 100644 index 7941c303..00000000 --- a/docs/knowledge-base/grid-search.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Grid Search Bar -description: An example on how to implement a search bar in the Grid. -type: how-to -page_title: Grid Search Bar | KendoReact Chart -slug: grid-search-bar -tags: grid, search, bar -ticketid: 1573969 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.5.0
    ProductProgress® KendoReact
    - -## Description - -How can I implement a search bar in the Grid? - -## Solution - -This can be achieved by creating a custom input. - -{% meta id height:500 %} -{% embed_file grid/grid-search-bar/app.tsx preview %} -{% embed_file grid/grid-search-bar/main.tsx %} -{% embed_file grid/grid-search-bar/sample-products.tsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-selection-mobile-scrolling.md b/docs/knowledge-base/grid-selection-mobile-scrolling.md deleted file mode 100644 index c285f26d..00000000 --- a/docs/knowledge-base/grid-selection-mobile-scrolling.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Grid with selection that supports scrolling on mobile -description: An example on how to allow mobile scrolling for a selectable Grid -type: how-to -page_title: Grid with selection that supports mobile scrolling - KendoReact Grid -slug: grid-selectable-mobile-scrolling -tags: grid, select, checkbox, mobile scrolling, grid selectable -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version7.0.2
    ProductProgress® KendoReact
    - - -## Description -When enabling selection for the Grid using the [selectable](https://www.telerik.com/kendo-react-ui/components/grid/api/GridProps/#toc-selectable/) prop, scrolling does not work using mobile. This is because screen scrolling will trigger the selection. - - -## Solution -Use checkbox selection instead. You can enable checkbox selection only when the Grid is used in a mobile machine. This will allow using the built-in `selectable` property when using a desktop or laptop, and only checkbox selection with a mobile machine. - -Here is an example with the described approach, where we are importing the `useDeviceType` method from the `isMobile.jsx` file. This method is used when setting the `selectable` property of the Grid such that it is set to `null` when the device type is either a mobile or tablet. This leaves us with only the checkbox selection: - -{% meta id height:550 %} -{% embed_file grid/grid-selection-mobile-scrolling/app.jsx preview %} -{% embed_file grid/grid-selection-mobile-scrolling/main.jsx %} -{% embed_file grid/grid-selection-mobile-scrolling/isMobile.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - -For more information about enabling checkbox selection, check the following example from the Grid Selection article: -- https://www.telerik.com/kendo-react-ui/components/grid/selection/#toc-customizing-the-selection - diff --git a/docs/knowledge-base/grid-show-details-in-popover.md b/docs/knowledge-base/grid-show-details-in-popover.md deleted file mode 100644 index 7ce72f07..00000000 --- a/docs/knowledge-base/grid-show-details-in-popover.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Show details info from data item in Popover on button click -description: An example on how to show Popover with details on button click -type: how-to -page_title: Add command button to show additional information for the row - KendoReact Grid -slug: grid-show-details-in-popover -position: -tags: grid, command, details -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - -## Description -I want to add command button for each row to show additional information from the data item. - -## Solution -For achieving the desired result, the dataItem for which the button is clicked must be passed to a state variable, so it can then be accessible within the Popover template. React Context is used for passing reference to the function showing the Popover to the command button. - -This is an example showcasing this approach: - -{% meta id:index height:480 %} -{% embed_file grid/grid-show-details-in-popover/app.jsx preview %} -{% embed_file grid/grid-show-details-in-popover/main.jsx %} -{% embed_file grid/grid-show-details-in-popover/myCommandCell.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-show-different-field-in-group.md b/docs/knowledge-base/grid-show-different-field-in-group.md deleted file mode 100644 index f7f97586..00000000 --- a/docs/knowledge-base/grid-show-different-field-in-group.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Show different field in group headers -description: An example on how to show different field within the group header -type: how-to -page_title: Showing different field value within the group headers - KendoReact Grid -slug: grid-show-different-field-in-group -position: -tags: grid, grouping -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - -## Description -I want to show different than the group field value within the group headers - -## Solution -For achieving the desired result we need to ensure that all items grouped by field A will have equal field B (the field that we want to display in the group header). As for the actual implementation, we need to handle the cellRender of the Grid and change the rendering of the group header cell for the group field that we want to change. The next step is to find the first data item in that group and get the value of the other field. - -This is an example showcasing this approach: - -{% meta id:index height:520 %} -{% embed_file grid/grid-show-different-field-in-group/app.jsx preview %} -{% embed_file grid/grid-show-different-field-in-group/main.jsx %} -{% embed_file grid/grid-show-different-field-in-group/products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grid-show-hide-columns.md b/docs/knowledge-base/grid-show-hide-columns.md deleted file mode 100644 index 45a395ea..00000000 --- a/docs/knowledge-base/grid-show-hide-columns.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Dynamically Show/Hide Columns in the Grid -description: An example on how to dynamically show or hide the columns in the KendoReact Grid. -type: how-to -page_title: Show/Hide Columns Dynamically in the Grid - KendoReact Grid -slug: grid-show-hide-columns -tags: grid, kendoreact, show, hide, columns, column -ticketid: 1514629 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version4.5.0
    ProductProgress® KendoReact
    - - -## Description - -How can I dynamically show or hide the columns in the grid? - -## Solution - -In order to achieve this, the Columns of the Grid should be rendered dynamically and the data for the Columns should be kept in the state, so that the changes in the Grid can be visualized. In the example below, each Column has a show property which determines whether that Column is shown. There are checkboxes above the Grid whose onChange event handlers cause the state change and thus cause the re-rendering of the Grid with the corresponding columns missing/added. - - -{% meta id height:650 %} -{% embed_file grid/show-hide-columns/app.jsx preview %} -{% embed_file grid/show-hide-columns/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-show-placeholder-for-filters.md b/docs/knowledge-base/grid-show-placeholder-for-filters.md deleted file mode 100644 index 2ecbb05c..00000000 --- a/docs/knowledge-base/grid-show-placeholder-for-filters.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Show placeholder in the KendoReact Grid filter components -description: An example on how to show placeholder for the filters - KendoReact Grid. -type: how-to -page_title: Set placeholders for the filters - KendoReact Grid -slug: grid-show-placeholder-for-filters -tags: grid, kendoreact, filtering, placeholder -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description - -How can I add "Search" text in the Grid filters when they are empty? - -## Solution - -For setting a placeholder text for the built-in Grid filters a combination of using PropsContext (for the DatePicker and the NumericTextBox) for changing the "placeholder" property and pure JavaScript for setting the "placeholder" attribute for simple inputs can be used. - -Following is an example demonstrating how to set a placeholder for NumericTextBox, DatePicker and simple inputs for the filter components in the Grid: - - -{% meta id height:480 %} -{% embed_file grid/grid-show-placeholder-for-filters/app.jsx preview %} -{% embed_file grid/grid-show-placeholder-for-filters/main.jsx %} -{% embed_file grid/grid-show-placeholder-for-filters/grid-with-filtering.jsx %} -{% embed_file grid/grid-show-placeholder-for-filters/sample-products.js %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-stateful.md b/docs/knowledge-base/grid-stateful.md deleted file mode 100644 index cc96cf7c..00000000 --- a/docs/knowledge-base/grid-stateful.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Configure Stateful Grids -description: "Learn how to configure a stateful KendoReact Grid allowing you to perform paging, sorting, filtering, grouping, and editing, and to reuse it across apps." -type: how-to -page_title: Configure Stateful Grids - KendoReact Grid -slug: grid-stateful -tags: grid, kendoreact, stateful -ticketid: 1403874 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.15.0
    ProductProgress® KendoReact
    - - -## Description - -How to make a stateful and reusable Grid? - -## Solution - -#### Configuring Stateful Grids - -[Stateful components](https://code.tutsplus.com/tutorials/stateful-vs-stateless-functional-components-in-react--cms-29541) are class components that have a state which gets initialized in the constructor. - -You can configure a stateful KendoReact Data Grid to perform paging, sorting, filtering, grouping, and editing, and also reuse it in multiple applications and pages by setting its columns and desired data operations. - -#### Data Operations - -The stateful Grid performs its data operations by using the `process` method of the [`DataQuery`]({% slug overview_dataquery %}) library. To apply the changes and to save the current state of the grid data when a data operation is performed, handle the [`onDataStateChange`]({% slug api_grid_gridprops %}#toc-ondatachange) event. - -```jsx-no-run - const onDataStateChange = (event) => { - const updatedState = { - ...gridState, - skip: event.dataState?.skip, - take: event.dataState?.take, - sort: event.dataState?.sort, - filter: event.dataState?.filter, - }; - setGridState(updatedState); - }; -``` - -#### Editing - -To configure the stateful Grid for editing: - -1. Set two different data collections. The first data collection will be displayed in the Grid after the data operations are applied. The second data collection will be used to edit and add items to the collection. - - > If the stateful Grid is not intended to be groupable, you can use only one data collection. - - ```jsx-no-run - const [state, setState] = useState({ - result: process(props.data, {skip: 0}), - dataState: { skip: 0 }, - unprocessedData: props.data - }); - ``` - -1. Handle the [`onItemChange`]({% slug api_grid_gridprops %}#toc-onitemchange) event which will fire each time the user updates any of the editors. - - ```jsx-no-run - const onItemChange = (event) => { - let data = [...state.unprocessedData]; // Clone to avoid direct mutation - let currentDataState = { ...state.dataState }; - - if (event.field === props.editField && event.value === 'delete') { - data.splice(data.findIndex(d => d === event.dataItem), 1); - } else { - const index = data.findIndex(d => d === event.dataItem); - data[index] = { ...data[index], [event.field]: event.value }; - } - - setState({ - ...state, - result: process(data, currentDataState), - unprocessedData: data - }); - }; - ``` - -1. Add items to the collection by using a function which you can call from a button click either inside the Grid toolbar or outside the Grid. - - ```jsx-no-run - const addNew = () => { - let data = [...state.unprocessedData]; - data.unshift({ [props.editField]: true, Discontinued: false, ProductID: 0 }); - setState({ - ...state, - result: process(data, state.dataState), - unprocessedData: data - }); - }; - ``` - -#### Local Data Operations with HOC - -You can sort, filter, or page the local data to which the KendoReact Data Grid is bound by using the Kendo UI Data Query component. - -The following example demonstrates how to create a [higher-order component (HOC)](https://reactjs.org/docs/higher-order-components.html) which uses the `process()` Data Query method to manage the local data operations. The HOC has its own state and adds the `filter`, `sort`, `total`, and `skip` props to the Grid to handle its [`onDataStateChange`]({% slug api_grid_gridprops %}#toc-ondatastatechange) event. The HOC function is then applied for binding two Grids to different sets of data without the need for you to write any logic for the filtering, sorting, and paging operations. - -{% meta id:stateful height:700 %} -{% embed_file grid/stateful/app.jsx preview %} -{% embed_file grid/stateful/main.jsx %} -{% embed_file grid/stateful/with-state.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-store-columns-width-and-order.md b/docs/knowledge-base/grid-store-columns-width-and-order.md deleted file mode 100644 index c6601399..00000000 --- a/docs/knowledge-base/grid-store-columns-width-and-order.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Store Grid columns width and order in the localStorage -description: An example on how to store the width and the order of the Grid columns. -type: how-to -page_title: Store the width and the order of the columns - KendoReact Grid -slug: grid-store-columns-width-and-order -tags: grid, kendoreact, store, columns, width -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.9.0
    ProductProgress® KendoReact
    - - -## Description - -I want to store the order and the width of the Grid columns on resizing and reordering. - -## Solution - -Handle the onColumnResize and onColumnReorder to get reference to the updated columns collection and store it in a localStorage variable. The columns definition of the Grid can then be loaded from that collection. - -Following is an example demonstrating this approach: - - -{% meta id height:500 %} -{% embed_file grid/store-columns-width-and-order/app.jsx preview %} -{% embed_file grid/store-columns-width-and-order/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-store-state-in-localstorage.md b/docs/knowledge-base/grid-store-state-in-localstorage.md deleted file mode 100644 index 787af49f..00000000 --- a/docs/knowledge-base/grid-store-state-in-localstorage.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Persisting The KendoReact Grid's DataState Between Page Reloads -description: An example on how to preserve the state of the KendoReact Grid. -type: how-to -page_title: Save State - KendoReact Grid -slug: grid-save-state-to-localstorage -tags: grid, kendoreact, state, localstorage, refresh -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Versionv5.12.1
    ProductProgress® KendoReact
    - - -## Description - -I want to preserve the Grid state between page reloads. - -## Solution - -You can achieve this by saving the DataState to the localStorage. When the dataState changes, store it in the localStore, and when the component loads, set the previously saved dataState from the localStorage. - -{% meta id:index height:480 %} -{% embed_file grid/grid-save-datastate-to-localstorage/app.jsx preview %} -{% embed_file grid/grid-save-datastate-to-localstorage/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-using-fitColumns-method.md b/docs/knowledge-base/grid-using-fitColumns-method.md deleted file mode 100644 index 660c975a..00000000 --- a/docs/knowledge-base/grid-using-fitColumns-method.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Using fitColumns method to change the width of a column to fit its content -description: An example on how to use the fitColumns method for fitting content in a column - KendoReact Grid. -type: how-to -page_title: Use fitColumns method for changing the width of a column to fit its content - KendoReact Grid -slug: grid-using-fitColumns-method -tags: grid, kendoreact, fitColumns, width -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.9.0
    ProductProgress® KendoReact
    - - -## Description - -I want to change the width of the columns to fit the content. - -## Solution - -The Grid's API has fitColumns method that will change the width of a given column to fit its content. - -Following is an example demonstrating this approach: - - -{% meta id height:450 %} -{% embed_file grid/using-fitColumns-method/app.jsx preview %} -{% embed_file grid/using-fitColumns-method/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/grid-virtual-scrolling-pagechange-event.md b/docs/knowledge-base/grid-virtual-scrolling-pagechange-event.md deleted file mode 100644 index 5be0b8d6..00000000 --- a/docs/knowledge-base/grid-virtual-scrolling-pagechange-event.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Determine which scrollbar have triggered the onPageChange event with virtual scrolling in the Grid -description: An example on how to determine which scrollbar was moved to fire onPageChange - KendoReact Grid. -type: how-to -page_title: Find which scrollbar have trigged the onPageChange event when virtual scrolling is enabled - KendoReact Grid -slug: grid-virtual-scrolling-pagechange-event -tags: grid, kendoreact, virtualization, scrolling -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.9.0
    ProductProgress® KendoReact
    - - -## Description - -When virtual scrolling is enabled for the Grid, the onPageChange event fires even if the horizontal scrollbar is moved. How can I determine if the onPageChange is triggered from the vertical scrollbar? - -## Solution - -The onPageChange event contains the nativeEvent and storing its target scrollTop and scrollLeft values can be used for determining which scrollbar have triggered the event. - -Following is an example demonstrating this approach: - - -{% meta id height:500 %} -{% embed_file grid/virtual-scrolling-pagechange-event/app.jsx preview %} -{% embed_file grid/virtual-scrolling-pagechange-event/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/gridcolumnmenucheckboxfilter-outside-grid.md b/docs/knowledge-base/gridcolumnmenucheckboxfilter-outside-grid.md deleted file mode 100644 index 9935bb33..00000000 --- a/docs/knowledge-base/gridcolumnmenucheckboxfilter-outside-grid.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Render the GridColumnMenuCheckBoxFilter component outside the Grid -description: An example on how to render the GridColumnMenuCheckBoxFilter component outside the Grid -type: how-to -page_title: GridColumnMenuCheckBoxFilter outside the Grid - KendoReact Grid -slug: grid-columnmenucheckboxfilter-outside-grid -tags: grid, columnmenu, checkboxfilter, outside grid -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version6.1.1
    ProductProgress® KendoReact
    - -## Description -I want to render the GridColumnMenuCheckBoxFilter component as a standalone component without integrating it inside the KendoReact Grid. - -## Solution -You can use the GridColumnMenuCheckboxFilter as a separate component for returning filter expressions. For using the GridColumnMenuCheckboxFilter, you will have to pass a "column" object with a "field" and the "data". - -This is an example showcasing this approach where the filter expression is logged to the console: - -{% meta id:index height:700 %} -{% embed_file grid/checkboxfilter-outside-grid/app.jsx preview %} -{% embed_file grid/checkboxfilter-outside-grid/main.jsx %} -{% embed_file grid/checkboxfilter-outside-grid/columnMenu.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/grouping-with-custom-cell.md b/docs/knowledge-base/grouping-with-custom-cell.md deleted file mode 100644 index 48237cf0..00000000 --- a/docs/knowledge-base/grouping-with-custom-cell.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Create a Grid with Grouping and a Custom Cell -description: An example on how to use the KendoReact Grid with grouping and custom cells. -type: how-to -page_title: Create a Grid with Grouping and a Custom Cell - KendoReact Grid -slug: kendoreact-grid-with-grouping-and-a-custom-cell -tags: grid, rows, cell, grouping, -ticketid: 1385369 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.0.0
    ProductProgress® KendoReact
    - - -## Description - -KendoReact Grid looses cell alignment when using the cell prop with grouping. - -## Solution - -In this case, the issue occurs because when the `rowType` is `groupHeader` the cell has to return null. - -{% meta id:index height:600 %} -{% embed_file grid/grouping-with-custom-cell/app.jsx preview %} -{% embed_file grid/grouping-with-custom-cell/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/hide-kendoreact-notification-after-a-timeout.md b/docs/knowledge-base/hide-kendoreact-notification-after-a-timeout.md deleted file mode 100644 index 84116d51..00000000 --- a/docs/knowledge-base/hide-kendoreact-notification-after-a-timeout.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Hide KendoReact Notifications after a Timeout -description: An example on how to hide the KendoReact Notification after a timeout. -type: how-to -page_title: Hide KendoReact Notifications after a Timeout - KendoReact Notification -slug: hide-kendoreact-notification-after-a-timeout -position: -tags: notification -ticketid: 1422282 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version3.0.0
    ProductProgress® KendoReact
    - - -## Description -How to hide the Notification component automatically after a specific timeout. - -## Solution -Currently, this can be done using the setTimeout function as shown in the example below. - -{% meta id:index height:300 %} -{% embed_file notification/hide-after/app.jsx preview %} -{% embed_file notification/hide-after/main.jsx %} -{% endmeta %} - -Also, there is a feature request for this in our portal and I can suggest voting for it as it will increase its chances to be implemented as a built-in feature: - -https://feedback.telerik.com/kendo-react-ui/1413293-add-hideafter-prop-to-the-notification-component diff --git a/docs/knowledge-base/how-to-retain-checkbox-selection-with-server-paging.md b/docs/knowledge-base/how-to-retain-checkbox-selection-with-server-paging.md deleted file mode 100644 index e0719b01..00000000 --- a/docs/knowledge-base/how-to-retain-checkbox-selection-with-server-paging.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Retain Checkbox Selection with Server Paging -description: An example on how to retain checkbox selection in the KendoReact Grid with server paging. -type: how-to -page_title: Retain Checkbox Selection with Server Paging - KendoReact Grid -slug: how-to-retain-checkbox-selection-with-server-paging -tags: grid, checkbox, selection, sever-paging -ticketid: 1413958 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.0.0.
    ProductProgress® KendoReact
    - - -## Description - -How can I retain the selection of checkbox in the KendoReact Grid when I navigate across different pages when the data comes from API server-side paging and sorting are configured? - -## Solution - -Keep the selected items by their ids inside the state. - -{% meta id:index height:500 %} -{% embed_file grid/checkbox-selection-server-side/app.jsx preview %} -{% embed_file grid/checkbox-selection-server-side/main.jsx %} -{% embed_file grid/checkbox-selection-server-side/products-loader.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/inputs-delayed-value-change.md b/docs/knowledge-base/inputs-delayed-value-change.md deleted file mode 100644 index 96a7d4d4..00000000 --- a/docs/knowledge-base/inputs-delayed-value-change.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Add delayed value for the Input component that will change after a period of time of no typing -description: An example on how to have delayed value after a period of no typing -type: how-to -page_title: Adding an option for a delayed value that will change only after a period of time without typing - KendoReact Input -slug: inputs-delayed-value-change -tags: input, inputs, pickers -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description -I want the value of the Input to change only after the user stops typing for some time. - -## Solution -Having a delayed value is possible by introducing a second state variable and tracking the time for the last change. Such implementation might be suitable for filtering, where triggering the filtering can be initiated only when the user stops typing. - -This is an example showcasing how to limit the value: - -{% meta height:300 %} -{% embed_file inputs/inputs-delayed-value-change/app.jsx preview %} -{% embed_file inputs/inputs-delayed-value-change/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/listbox-keyboard-navigation.md b/docs/knowledge-base/listbox-keyboard-navigation.md deleted file mode 100644 index d15884b1..00000000 --- a/docs/knowledge-base/listbox-keyboard-navigation.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Implement Keyboard Navigation for the KendoReact ListBox -description: An example on how to achieve keyboard navigation for the KendoReact ListBox -type: how-to -page_title: KeyBoard Navigation - KendoReact ListBox -slug: listbox-keyboard-navigation -tags: listbox, keyboard, navigation, keyboard navigation, key, list -ticketid: 1608113 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Versionv5.13.1
    ProductProgress® KendoReact
    - - -## Description - -I want to implement keyboard navigation for the ListBox component. - -## Solution - -In order to implement the keyboard navigation functionality for the ListBox, wrap it with a `div` element and handle the `onKeyDown` event of the `div`. Inside the `onKeyDown` event handler, move the items and change their selection based on the pressed keys. - -{% meta height:500 %} -{% embed_file listbox/listbox-keyboard-navigation/app.jsx preview %} -{% embed_file listbox/listbox-keyboard-navigation/main.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/listbox-show-drag-clue.md b/docs/knowledge-base/listbox-show-drag-clue.md deleted file mode 100644 index 3e3cf2de..00000000 --- a/docs/knowledge-base/listbox-show-drag-clue.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Show clue indicator when dragging an item in the ListBox -description: An example on how to show clue indicator when an item is dragged in the ListBox -type: how-to -page_title: Show indicator for the drop position of an item while dragging - KendoReact ListBox -slug: listbox-show-drag-clue -tags: listbox, grouping, customization, appearance -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description -I want to show an indicator for the drop position of an item in the ListBox while dragging. - -## Solution -For displaying a clue indicator for the drop position the onDragOver event should be used for adding a class name to the item where the dragged item will be dropped. Based on the position on the target item and the target ListBox, a top or a bottom border can be displayed to show the correct position where the item will be inserted. - -Within the onDrop and on each onDragOver we are clearing the class name that was previously added. - -{% meta height:500 %} -{% embed_file listbox/show-drag-clue/app.jsx preview %} -{% embed_file listbox/show-drag-clue/main.jsx %} -{% embed_file listbox/show-drag-clue/products.json %} -{% embed_file listbox/show-drag-clue/styles.css %} -{% endmeta %} diff --git a/docs/knowledge-base/listview-grouping.md b/docs/knowledge-base/listview-grouping.md deleted file mode 100644 index a82d0876..00000000 --- a/docs/knowledge-base/listview-grouping.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Add grouping functionality for the ListView -description: An example on how to render grouped items in ListView -type: how-to -page_title: Grouping functionality - KendoReact ListView -slug: listview-grouping -tags: listview, grouping, customization, appearance -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.12.0
    ProductProgress® KendoReact
    - - -## Description -I want to have grouping functionality in KendoReact ListView - -## Solution -The ListView is a template component and it allows complex rendering of the items. - -The first step for achieving the desired result will be to group the items by using the groupBy helper method. This will create an array where the parent items will be group items holding the group value and an items collection with the data items of that group. - -The second step will be to create a template that will take advantage of the new data structure and render the parent items (group items) as the main containers and the child items (the data items for each group) within that container. - -This is an example showcasing how to limit the value: - -{% meta height:760 %} -{% embed_file listview/listview-grouping/app.jsx preview %} -{% embed_file listview/listview-grouping/main.jsx %} -{% embed_file listview/listview-grouping/products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/listview-scheduler-drag-and-drop.md b/docs/knowledge-base/listview-scheduler-drag-and-drop.md deleted file mode 100644 index 5ff05a8c..00000000 --- a/docs/knowledge-base/listview-scheduler-drag-and-drop.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Drag and Drop Items from KendoReact ListView to KendoReact Scheduler -description: Learn how to enable drag and drop functionality between KendoReact ListView and Scheduler components. -type: how-to -page_title: How to Enable Drag and Drop between KendoReact ListView and Scheduler -slug: drag-drop-kendoreact-listview-scheduler -tags: react, kendoReact, drag and drop, ListView, Scheduler -res_type: kb ---- - -## Environment - -| Property | Value | -| --- | --- | -| Product | KendoReact | -| Version | 7.0.2| - -## Description - -Looking for a drag and drop between KendoReact ListView and KendoReact Scheduler. I want to transfer items from the ListView to the Scheduler. - -## Solution - -To enable drag and drop functionality between a KendoReact ListView and a KendoReact Scheduler, follow these steps: - -1. Render a custom ListView item by using the [`item`](https://www.telerik.com/kendo-react-ui/components/listview/api/ListViewProps/#toc-item) prop. This allows you to make the row draggable and obtain the currently dragged item. -1. Add an `onDropEvent` to the Scheduler container using the [component ref](https://react.dev/reference/react/useRef). -1. When the user drops an item, add it to the Scheduler data by updating the state. - -{% meta id:index height:900 %} -{% embed_file scheduler/dnd-from-listview/app.jsx preview %} -{% embed_file scheduler/dnd-from-listview/main.jsx %} -{% embed_file shared/shared-data.js %} -{% endmeta %} - -## Notes - -- Make sure to install the required dependencies, such as `react-dnd`, `@progress/kendo-react-listview`, and `@progress/kendo-react-scheduler`. -- Refer to the official documentation for more information on the `DragSource` and `useRef` APIs. -- Adjust the code according to your specific use case and requirements. - -## See Also - -- [KendoReact ListView Documentation](https://www.telerik.com/kendo-react-ui/components/listview/) -- [KendoReact Scheduler Documentation](https://www.telerik.com/kendo-react-ui/components/scheduler/) diff --git a/docs/knowledge-base/localization-use-variable-in-messages.md b/docs/knowledge-base/localization-use-variable-in-messages.md deleted file mode 100644 index ce591611..00000000 --- a/docs/knowledge-base/localization-use-variable-in-messages.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Add support for variable in localization messages -description: An example on how to use variable with LocalizationProvider -type: how-to -page_title: Extending LocalizationProvider To Support Variables - KendoReact ListView -slug: localization-use-variable-in-messages -tags: localization, messages, variable, custom -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - - -## Description -I want to display state variable in the messages from the LocalizationProvider. - -## Solution -Extend the LocalizationProvider by providing an option for executing a ${variable} syntax within the messages. - -This is an example showcasing this approach: - -{% meta height:320 %} -{% embed_file localization/use-variable-in-messages/app.jsx preview %} -{% embed_file localization/use-variable-in-messages/main.jsx %} -{% embed_file localization/use-variable-in-messages/Chooser.jsx %} -{% embed_file localization/use-variable-in-messages/Message.jsx %} -{% embed_file localization/use-variable-in-messages/messages.js %} -{% embed_file localization/use-variable-in-messages/MyLocalizationProvider.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/map-add-shape-titles.md b/docs/knowledge-base/map-add-shape-titles.md deleted file mode 100644 index 020c783b..00000000 --- a/docs/knowledge-base/map-add-shape-titles.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Add Titles to Map Shapes -description: Learn how to add titles to shapes in the KendoReact Map. -type: how-to -page_title: Add Titles to Map Shapes - KendoReact Map -slug: map_add_shape_titles -tags: telerik, kendoreact, map, shapes, draw, title -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.5.1
    ProductProgress® KendoReact
    - -## Description - -How can I add some title text for the shapes in the Map? - -## Solution - -1. Add a [shape layer]({% slug shape_layers_map %}) to the Map configuration. -1. Attach a handler to the [`shapeCreated` event]({% slug events_map %}) of the Map. -1. Create a method that will create a label for a given shape. -1. Inside the method, retrieve the shape center using the [element bounding box]({% slug api_kendo-drawing_element %}#toc-bbox). -1. Get a reference to the shape layer so you can draw on its surface. -1. Draw the label by using the [Text element]({% slug api_kendo-drawing_text %}). - -The following example demonstrates how to add title text for Map shapes that are loaded from GeoJSON. - -{% meta height:700 %} -{% embed_file map/add-shape-titles/app.jsx preview %} -{% embed_file map/add-shape-titles/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/map-custom-bubble-symbols.md b/docs/knowledge-base/map-custom-bubble-symbols.md deleted file mode 100644 index 39a5349b..00000000 --- a/docs/knowledge-base/map-custom-bubble-symbols.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Render Custom Symbols for Map Bubble Layers -description: "Learn how to render custom symbols on a Bubble layer in the KendoReact Map." -type: how-to -page_title: Render Custom Symbols for Map Bubble Layers - KendoReact Map -slug: map_add_shape_titles -tags: telerik, kendoreact, map, shapes, bubble -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.5.1
    ProductProgress® KendoReact
    - -## Description - -How can I add some custom symbols to the Bubble layer of the Map? - -## Solution - -The [Bubble Layer]({% slug bubble_layers_map %}) allows you to define the way symbols are rendered. -This approach works by defining a symbol function that uses the [Drawing API]({% slug overview_drawing %}) to define the shape. The symbol is typically a Group of shapes. - -The following example demonstrates how to render 200-kilometer lines in West-East direction as a symbol. - -> The lines get longer the farther you go North, which is due to that fact that the example uses the [Mercator Projection](https://en.wikipedia.org/wiki/Mercator_projection). - -{% meta height:700 %} -{% embed_file map/custom-bubble-symbols/app.tsx preview %} -{% embed_file map/custom-bubble-symbols/main.tsx %} -{% embed_file map/custom-bubble-symbols/urban-areas.json %} -{% endmeta %} diff --git a/docs/knowledge-base/map-link-markers.md b/docs/knowledge-base/map-link-markers.md deleted file mode 100644 index 809a7f74..00000000 --- a/docs/knowledge-base/map-link-markers.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Link Map Markers to Locations -description: "Learn how to draw location pointers for markers in the KendoReact Map." -type: how-to -page_title: Link Map Markers to Locations - KendoReact Map -slug: map_link_markers -tags: telerik, kendoreact, map, markers, draw, link, line -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.5.1
    ProductProgress® KendoReact
    - -## Description - -How can I draw a straight line between a marker and a location? - -## Solution - -1. Add [shape and marker layers]({% slug overview_layers_map %}) to the Map configuration. -1. Attach a handler to the [reset event]({% slug events_map %}) of the Map. -1. Create a method that will draw a line between a marker and a specified position. -1. Inside the method, retrieve the from and to coordinates for the line by using the [locationToView method]({% slug api_map_map %}#toc-locationtoview). -1. Get a reference to the shape layer so you can draw on its surface. -1. Draw the line by using the [Path element]({% slug api_kendo-drawing_path %}). - -The following example demonstrates how to draw a straight line between a marker and a location. - -{% meta height:700 %} -{% embed_file map/link-markers/app.tsx preview %} -{% embed_file map/link-markers/main.tsx %} -{% endmeta %} diff --git a/docs/knowledge-base/merge-row-in-the-grid.md b/docs/knowledge-base/merge-row-in-the-grid.md deleted file mode 100644 index a5a203bb..00000000 --- a/docs/knowledge-base/merge-row-in-the-grid.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Merge Rows in the Grid -description: An example on how to merge rows in the KendoReact Grid. -type: how-to -page_title: Merge Rows in the Grid - KendoReact Grid -slug: merge-row-in-the-grid -tags: grid, rows, merge -ticketid: 1414492 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version3.0.0
    ProductProgress® KendoReact
    - - -## Description - -How can I merge rows in the KendoReact Data Grid? - -## Solution - -Use a [`cellRender`]({% slug api_grid_gridprops %}#toc-cellrender) and add `rowSpan` to the cells that need it. - -{% meta id:index height:760 %} -{% embed_file grid/merge-rows/app.jsx preview %} -{% embed_file grid/merge-rows/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/multiselect-color-tags.md b/docs/knowledge-base/multiselect-color-tags.md deleted file mode 100644 index 5832c974..00000000 --- a/docs/knowledge-base/multiselect-color-tags.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Change the colors of the selected MultiSelect tags based on a condition -description: Learn how to set the colors of the selected MultiSelect tags based on a condition -type: how-to -page_title: Change the colors of the selected MultiSelect tags based on a condition - KendoReact MultiSelect -slug: multiselect-color-tags -tags: multiselect, kendoreact, tags, colors, conditionally -ticketid: 1611089 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.14.1
    ProductProgress® KendoReact
    - -## Description - -How to color the selected tags of the MultiSelect based on a condition? - -## Solution - -This can be achieved by using the [`tagRender`]({% slug api_dropdowns_multiselectprops %}#toc-tagrender) property and setting the background color based on the required condition. - -{% meta id:index height:320 %} -{% embed_file multiselect/multiselect-color-tags/app.jsx preview %} -{% embed_file multiselect/multiselect-color-tags/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/multiselect-disable-items.md b/docs/knowledge-base/multiselect-disable-items.md deleted file mode 100644 index 12acc34c..00000000 --- a/docs/knowledge-base/multiselect-disable-items.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Disable list items in the MultiSelect component. -description: An example on how to disable list items in the KendoReact MultiSelect. -type: how-to -page_title: Disable items - KendoReact MultiSelect -slug: multiselect-disable-items -tags: disable, list, multiselect -ticketid: 1620902 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
    Product Version5.17.0
    ProductProgress® KendoReact
    - - -## Description - -I want disable specific items based on a certain condition? For example, I want to disable the items which their text starts with the letter A, disable a specific item based on its whole text value, or disabled an item based on its id value. - -## Solution - -> This is an alternative solution for the approach used in the [documentation](https://www.telerik.com/kendo-react-ui/components/dropdowns/multiselect/disabled-item/). The following implementation also shows how to keep the Popup open when the disabled item is clicked. - -You can achieve this using the `itemRender` property where you can set the CSS styles `pointer-events: none` and `opacity: 0.7` for certain items. -In addition, when clicking on a disabled item, the click event will happen on the
      element ( `k-list-ul` ) and this would close the Popup by default. Therefore, it is required to handle the component in controlled mode such that the `onClose` event does not close the component when the item returned in the SyntheticEvent is `k-list-ul`. - -This is an example demonstrating this implementation where the `Albania` item is disabled: - -{% meta id:index height:760 %} -{% embed_file multiselect/multiselect-disable-items/app.jsx preview %} -{% embed_file multiselect/multiselect-disable-items/main.jsx %} -{% embed_file shared/shared-countries.js %} -{% endmeta %} diff --git a/docs/knowledge-base/multiselect-limit-input.md b/docs/knowledge-base/multiselect-limit-input.md deleted file mode 100644 index ec9e5581..00000000 --- a/docs/knowledge-base/multiselect-limit-input.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Limit the MultiSelect input to two characters -description: An example on how to restrict the user to enter only two characters -type: how-to -page_title: Limit MultiSelect to accept only two characters - KendoReact MultiSelect -slug: multi-select-limit-input -tags: multi-select, limit input, maxLength -ticketid: 1599602 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version6.1.0
      ProductProgress® KendoReact
      - -## Description - -How to Limit the user to be able to enter only two characters in the MultiSelect? - -## Solution - -This can be achieved by limiting the input on the [onFilterChange](https://www.telerik.com/kendo-react-ui/components/dropdowns/api/MultiSelectProps/#toc-onfilterchange) event: - -{% meta id:index height:900 %} -{% embed_file multiselect/multiselect-limit-input/app.jsx preview %} -{% embed_file multiselect/multiselect-limit-input/main.jsx %} -{% embed_file shared/shared-countries.js %} -{% endmeta %} diff --git a/docs/knowledge-base/multiselect-reorder-tags.md b/docs/knowledge-base/multiselect-reorder-tags.md deleted file mode 100644 index 21aba232..00000000 --- a/docs/knowledge-base/multiselect-reorder-tags.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Add option for reordering KendoReact MultiSelect tags -description: An example on how to reorder tags in KendoReact MultiSelect. -type: how-to -page_title: Allow Reordering For MultiSelect Tags With Sortable - KendoReact MultiSelect -slug: multiselect-reorder-tags -tags: multiselect, kendoreact, reorder, sortable -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - - -## Description - -Can I reorder the selected values/tags in the MultiSelect? - -## Solution - -1. Hide the default tags by setting empty element in the MultiSelect "tags" option. -1. Use Sortable to render custom tags over the input of the MultiSelect. - -This is an example showcasing this in action: - -{% meta id:index height:280 %} -{% embed_file multiselect/multiselect-reorder-tags/app.jsx preview %} -{% embed_file multiselect/multiselect-reorder-tags/main.jsx %} -{% embed_file multiselect/multiselect-reorder-tags/styles.css %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/multiselect-select-all-checkbox.md b/docs/knowledge-base/multiselect-select-all-checkbox.md deleted file mode 100644 index 1174eba8..00000000 --- a/docs/knowledge-base/multiselect-select-all-checkbox.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Add a Select All Checkbox in KendoReact MultiSelect -description: An example on how to add a Select All checkbox in the KendoReact MultiSelect. -type: how-to -page_title: Add a Select All Checkbox in the MultiSelect - KendoReact MultiSelect -slug: multiselect-select-all-checkbox -tags: multiselect, kendoreact, dropdownlist, dropdowns, checkbox, select, all -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version4.12.0
      ProductProgress® KendoReact
      - - -## Description - -How to add a checkbox to the KendoReact DropDowns and to how add a select all checkbox? - -## Solution - -This can be done with [the KendoReact Multiselect component]({% slug overview_multiselect %}) and will require the following: - -1. Add an extra data item to the data collection that will represent the Select All item. -1. Use the [itemRender prop]({% slug api_dropdowns_multiselectprops %}#toc-itemrender) that will allow rendering the checkboxes. -1. Handle the extra logic inside the [onChange event]({% slug api_dropdowns_multiselectprops %}#toc-onchange) that will allow setting the specific logic for the select all item. - -This is an example showcasing this in action: - -{% meta id:index height:480 %} -{% variant title:Hooks %} -{% embed_file multiselect/multiselect-select-all-checkbox/func/app.jsx preview %} -{% embed_file multiselect/multiselect-select-all-checkbox/func/main.jsx %} -{% embed_file shared/shared-countries.js %} -{% endvariant %} -{% variant title:Classes %} -{% embed_file multiselect/multiselect-select-all-checkbox/class/app.jsx preview %} -{% embed_file multiselect/multiselect-select-all-checkbox/class/main.jsx %} -{% embed_file shared/shared-countries.js %} -{% endvariant %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/multiselect-set-maximum-selection.md b/docs/knowledge-base/multiselect-set-maximum-selection.md deleted file mode 100644 index ca8d0593..00000000 --- a/docs/knowledge-base/multiselect-set-maximum-selection.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Restrict the Number of Selected Items in the MultiSelect -description: An example on how to restrict the number of selected items in a KendoReact MultiSelect. -type: how-to -page_title: Restrict the Number of Selected Items in the MultiSelect - KendoReact MultiSelect -slug: multiselect-select-all-checkbox -tags: multiselect, kendoreact, selection -ticketid: 1547156 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version4.13.0
      ProductProgress® KendoReact
      - - -## Description - -How to restrict the number of selected items in a KendoReact MultiSelect? - -## Solution - -This can be achieved by using the slice method and passing the number of items we wish to limit as an argument: - -{% meta id:index height:450 %} -{% embed_file multiselect/multiselect-set-maximum-selection/app.jsx preview %} -{% embed_file multiselect/multiselect-set-maximum-selection/main.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/multiselect-tags-and-tagrender.md b/docs/knowledge-base/multiselect-tags-and-tagrender.md deleted file mode 100644 index d847dbb0..00000000 --- a/docs/knowledge-base/multiselect-tags-and-tagrender.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Blend the tagRender and tags functionality of Kendo React Multiselect -description: An example on how to blend the tagRender and tags functionality of Kendo React Multiselect -type: how-to -page_title: MultiSelect with tags and tagRender functionality - KendoReact MultiSelect -slug: multiselect-tags-and-tagrender -tags: multiselect, tags, tagrender -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version6.1.1
      ProductProgress® KendoReact
      - -## Description -I want to use both the [tagRender](https://www.telerik.com/kendo-react-ui/components/dropdowns/multiselect/custom-rendering/#toc-tags) and [tags](https://www.telerik.com/kendo-react-ui/components/dropdowns/multiselect/custom-tags/) functionalities together in the MultiSelect component. - -## Solution -The below example demonstrates this approach where the `tags` property is used to display the number of selected items, while the `tagRender` property is used to customize the item tags to show icons instead of text. - -The tags are stored in the `tags` state variable where the first one stores the count of the selected items. When new items are added, in the `handleChange` event handler, they are pushed to the `tags` state variable. On the other had, when an item is removed by clicking on the item from the popup again, they are removed from the `tags` state variable using the `filter` method. In addition, the `tagRender` event handler renders a font icon depending in the `tagData.text` value. - -{% meta id:index height:700 %} -{% embed_file multiselect/multiselect-tags-and-tagrender/app.jsx preview %} -{% embed_file multiselect/multiselect-tags-and-tagrender/main.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/multiselecttree-lazy-loading.md b/docs/knowledge-base/multiselecttree-lazy-loading.md deleted file mode 100644 index 256bb7e0..00000000 --- a/docs/knowledge-base/multiselecttree-lazy-loading.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Lazy load the items of the KendoReact MultiSelectTree component. -description: An example on how to lazy load the items in the KendoReact MultiSelectTree component. -type: how-to -page_title: Lazy load the items of the MultiSelectTree component - KendoReact MultiSelectTree -slug: multiselecttree-lazy-loading -tags: multiselecttree, lazy loading, lazy -ticketid: 1627782 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version6.0.3
      ProductProgress® KendoReact
      - -## Description - -How can I lazy load the items of the KendoReact MultiSelect component? - -## Solution - -The below example simulates an API call for the MultiSelectTree component by loading a `loadingPanel` component to the MultiSelectTree element when an item is expanded. -In addition, the loadingPanel is added to the MultiSelectTree element using ReactDOM.createPortal in the LoadingPanel component. Also, the `loading` state variable is set to true in the `onExpandChange` event handler and in that case the panel will appear since it is rendered conditionally with the `loading` variable. -Moreover, in the `onExpandChange` method, set a 1000ms timeout in order to simulate an API call. Inside the `setTimeout` method, set the new expanded state and `loading` variable to false: - -{% meta id height:580 %} -{% embed_file multiselecttree/multiselecttree-lazy-loading/app.jsx preview %} -{% embed_file multiselecttree/multiselecttree-lazy-loading/main.jsx %} -{% embed_file multiselecttree/multiselecttree-lazy-loading/multiselecttree-data-operations.jsx %} -{% embed_file multiselecttree/multiselecttree-lazy-loading/style.css %} -{% embed_file multiselecttree/multiselecttree-lazy-loading/tree-data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/multiviewcalendar-control-focus-date.md b/docs/knowledge-base/multiviewcalendar-control-focus-date.md deleted file mode 100644 index 6438859d..00000000 --- a/docs/knowledge-base/multiviewcalendar-control-focus-date.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Control the Focus MultiViewCalendar Date -description: An example on how to control the focus date in the KendoReact MultiViewCalendar. -type: how-to -page_title: Control the Focus MultiViewCalendar Date - KendoReact MultiViewCalendar -slug: multiviewcalendar-control-focus-date -tags: multiviewcalendar, kendoreact, focus, date -ticketid: 754 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version4.7.0
      ProductProgress® KendoReact
      - - -## Description - -When changing the selected value externally the MultiViewCalendar selects the new date correctly but does not jump to it if it is a range or array. The calendar seems to update correctly if it only handles single dates. - -## Solution - -The can be controlled by updating the focus date in the internal state of the MultiViewCalendar. - -```jsx-no-run - this.MultiViewCalendarRef.setState({ focusedDate : newFocusDate }); -``` - -{% meta id:index height:600 %} -{% embed_file dateinputs/multiviewcalendar-control-focus-date/app.jsx preview %} -{% embed_file dateinputs/multiviewcalendar-control-focus-date/main.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/nextjs-theme-switcher.md b/docs/knowledge-base/nextjs-theme-switcher.md deleted file mode 100644 index 6a18cd16..00000000 --- a/docs/knowledge-base/nextjs-theme-switcher.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Next.js Theme Switcher -description: An example on how to implement a Kendo theme switcher with Next.js. -type: how-to -page_title: Change between the kendo themes in Next.js - KendoReact -slug: nextjs-theme-switcher -tags: nextjs, theme switcher, kendo themes switcher, nextjs theme switcher -ticketid: 1624402 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version7.3.0
      ProductProgress® KendoReact
      - -## Description - -I want to implement a theme switcher that changes between all the different kendo [theme swatches](https://www.telerik.com/design-system/docs/themes/customization/swatches/) in KendoReact. - -## Solution - -You can achieve this using CDN imports for the themes. Basically, in the main `layout.js` file, add the link to the default main swatch inside the head element. In addition, the `ThemeSwitcher` component can be added in the body, where this will always render it no matter the route. - -```jsx -export default function RootLayout({ children }) { - return ( - - - - - - - {children} - - - ); -} -``` - -For the ThemeSwitcher, the most convenient component is the KendoReact [DropDownList]({% slug dropdownlist_overview %}) component. This is because it supports [grouping]({% slug dropdownlist_overview %}), rendering [custom items]({% slug dropdownlist_custom-rendering %}), and [binding]({% dropdownlist_binding %}) its data to an array of objects. - -Basically, the main idea in this `ThemeSwitcher` component is to change the `href` attribute of the link in the onChange event handler of the DropDownList using `link.setAttribute`. - -```jsx -const handleChange = (event) => { - const link = document.head.querySelector("link[data-kendo"); - if (link) { - link.setAttribute( - "href", - `https://cdn.kendostatic.com/themes/7.2.1/${event.target.value.swatch}.css` - ); - } -}; -``` - -This approach is demonstrated in [this StackBlitz example](https://stackblitz.com/edit/stackblitz-starters-ajmsqv?description=The%20React%20framework%20for%20production&file=app%2Fcomponents%2FThemeSwitcher.jsx&title=Next.js%20Starter). diff --git a/docs/knowledge-base/notification-stack-notifications.md b/docs/knowledge-base/notification-stack-notifications.md deleted file mode 100644 index 3ee91075..00000000 --- a/docs/knowledge-base/notification-stack-notifications.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Stack multiple Notification -description: An example on how to stack KendoReact Notification. -type: how-to -page_title: Stack KendoReact Notifications - KendoReact Notification -slug: stack-notifications -position: -tags: notification, stack, messages -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - - -## Description -How to stack multiple Notifications? - -## Solution -Use an array state variable where the data for the notifications will be added and within the render use a "map" function to initialize multiple Notification components. - -Here is an example with the above approach: - -{% meta id:index height:500 %} -{% embed_file notification/stack-notifications/app.jsx preview %} -{% embed_file notification/stack-notifications/main.jsx %} -{% embed_file notification/stack-notifications/styles.css %} -{% endmeta %} diff --git a/docs/knowledge-base/numerictextbox-clear-value-on-esc-key.md b/docs/knowledge-base/numerictextbox-clear-value-on-esc-key.md deleted file mode 100644 index bafde845..00000000 --- a/docs/knowledge-base/numerictextbox-clear-value-on-esc-key.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Clear NumericTextBox value on pressing ESC key -description: An example on how to clear the NumericTextBox value by pressing the ESC key -type: how-to -page_title: Adding custom logic for clearing the value when the ESC key is pressed - KendoReact NumericTextBox -slug: numerictextbox-clear-value-on-esc-key -tags: input, inputs, numerictextbox, clear, esc -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version5.13.1
      ProductProgress® KendoReact
      - - -## Description -I want to add custom logic to the NumericTextBox for clearing the value when the ESC key is pressed. - -## Solution -Within React.useEffect, after the initialization of the component, add event listener to the input element of the NumericTextBox and set the value to "null" if the keyCode is "27". - -Following is an example demonstrating this approach: - -{% meta height:300 %} -{% embed_file inputs/numerictextbox-clear-value-on-esc-key/app.jsx preview %} -{% embed_file inputs/numerictextbox-clear-value-on-esc-key/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/panelbar-open-in-new-window.md b/docs/knowledge-base/panelbar-open-in-new-window.md deleted file mode 100644 index 3f96ab8f..00000000 --- a/docs/knowledge-base/panelbar-open-in-new-window.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Changing the PanelBarItem to allow opening in new window -description: An example on how to change the PanelBarItem so it can allow opening in new window -type: how-to -page_title: Adding href within the PanelBarItem so it can allow opening in new window on right-click - KendoReact PanelBar -slug: panelbar-open-in-new-window -tags: panelbar, layout, kendoreact -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.13.0
      ProductProgress® KendoReact
      - -## Description -I want to have the option to open on right-click the PanelBarItem target in new window - -## Solution -The browser displays the "Open in new window" option on right-click when the element has "href", so in order to allow this for the PanelBarItem we need to add an anchor element with "href". This can be achieved by setting a custom "title" for the PanelBarItem that will render the anchor element. - -{% meta id height:650 %} -{% embed_file layout/panelbar-open-in-new-window/app.jsx %} -{% embed_file layout/panelbar-open-in-new-window/main.jsx %} -{% embed_file layout/panelbar-open-in-new-window/About.jsx %} -{% embed_file layout/panelbar-open-in-new-window/Home.jsx %} -{% embed_file layout/panelbar-open-in-new-window/PanelBarNavContainer.jsx preview %} -{% embed_file layout/panelbar-open-in-new-window/Products.jsx %} -{% embed_file layout/panelbar-open-in-new-window/Team.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/panelbar-render-button-in-panelbaritem.md b/docs/knowledge-base/panelbar-render-button-in-panelbaritem.md deleted file mode 100644 index 77562a0d..00000000 --- a/docs/knowledge-base/panelbar-render-button-in-panelbaritem.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Rendering button in PanelBarItem without triggering selection, expand nor collapse -description: An example on how to add button in PanelBarItem -type: how-to -page_title: Add Clickable Button In PanelBarItem Without Triggering Selection, Expand Or Collapse - KendoReact PanelBar -slug: panelbar-add-button-in-panelbaritem -tags: panelbar, layout, kendoreact, panelbaritem, button -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - -## Description -I want to add a button in PanelBarItem but without selecting the item and without triggering the expand/collapse - -## Solution -Add a Button in the PanelBarItem and within the onClick event use preventDefault and stopPropagation over the event to stop the propagation to the PanelBar. - -{% meta id height:760 %} -{% embed_file layout/panelbar-render-button-in-panelbaritem/app.jsx preview %} -{% embed_file layout/panelbar-render-button-in-panelbaritem/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/pass-additional-props-to-custom-cell.md b/docs/knowledge-base/pass-additional-props-to-custom-cell.md deleted file mode 100644 index 9c112d6e..00000000 --- a/docs/knowledge-base/pass-additional-props-to-custom-cell.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Pass Additional Props to Custom Grid Cells -description: An example on how to pass additional props to a custom cell in the KendoReact Grid. -type: how-to -page_title: Pass Additional Props to Custom Cells - KendoReact Grid -slug: pass-additional-props-to-custom-cell -tags: kendoreact, grid, cell, props -ticketid: 1411991 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version3.0.0
      ProductProgress® KendoReact
      - - -## Description - -How can I pass additional props to a custom cell of the KendoReact Grid so that I can to pass a custom prop to the cell that will be rendered? - -## Solution - -Use a function that will return the cell with the default and the custom props. For the full implementation of the suggested approach, refer to the [demo on customizing Grid cells]({% slug cells_grid %}#toc-cell-customization). diff --git a/docs/knowledge-base/pdfexport-setup-proxy.md b/docs/knowledge-base/pdfexport-setup-proxy.md deleted file mode 100644 index 71e19c58..00000000 --- a/docs/knowledge-base/pdfexport-setup-proxy.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: How can I implement a server proxy in the KendoReact PDFExport with Express.js -description: An example of how to configure a proxy in the KendoReact PDFExport. -type: how-to -page_title: implement a server proxy - KendoReact DropDownList -slug: pdfexport-server-proxy -tags: pdfexport, proxy, proxyurl, forceproxy, server proxy -ticketid: 1618904 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version7.3.0
      ProductProgress® KendoReact
      - -## Description - -I need to configure a server proxy using [Express.js](https://expressjs.com/)(Node.js) in the PDFExport component to download PDFs in browsers like Internet Explorer 9 and Safari. This is because these browsers do not support saving the exported PDF file. - -## Solution - -### Client-side application - -In your React application, render the PDFExport component settings its [forceProxy]({% slug api_pdfexport_pdfexportprops %}#toc-forceproxy) prop to true and [proxyURL]({% slug api_pdfexport_pdfexportprops %}#toc-proxyurl) to `http://localhost:4000/export`. Port 4000 is the where we will be running our Express.js project while `export` is the API route that will handle this proxy. - -```jsx -import * as React from "react"; -import { PDFExport } from "@progress/kendo-react-pdf"; -import { Button } from "@progress/kendo-react-buttons"; -import { Grid, GridColumn as Column } from "@progress/kendo-react-grid"; -import products from "./products.json"; - -const App = () => { - const container = React.useRef(null); - const pdfExportComponent = React.useRef(null); - const exportPDFWithComponent = () => { - if (pdfExportComponent.current) { - pdfExportComponent.current.save(); - } - }; - return ( -
      -
      - -
      -
      - -
      -

      Monthly report

      -
      - - - - - - - -
      -
      -
      -
      - ); -}; - -export default App; -``` - -### Express.js application - -1. Setup an Express.js project by following their [getting started](https://expressjs.com/en/starter/installing.html) article. -2. Add the following code to "app.js" or "index.js" depending on the entry point of your Node.js project. - -```jsx -const express = require("express"); -const cors = require("cors"); -var bodyParser = require("body-parser"); -var XLSX = require("xlsx"); -const app = express(); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); -// allow cross-origin requests -app.use(cors()); - -app.post("/export", (request, response) => { - let file = XLSX.read(request.body.base64, { type: "base64" }); - XLSX.writeFile(file, "my.xlsx"); -}); - -app.listen(4000, () => { - console.log("now listening for requests on port 4000"); -}); -``` - -In `app.post`, we are returning `request.body.base64` that is received after exporting the PDFExport component. You now have access to the content of the PDF file on the server. After this, you can use the `XLSX` library to download the file. You can also use the Kendo [File Saver]({% slug file_saver %}) package. diff --git a/docs/knowledge-base/popup-close-on-blur.md b/docs/knowledge-base/popup-close-on-blur.md deleted file mode 100644 index 4cb88645..00000000 --- a/docs/knowledge-base/popup-close-on-blur.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Close the Popup on Blur -description: An example on how to close the KendoReact Popup on blur. -type: how-to -page_title: Close the Popup on Blur- KendoReact Popup -slug: popup-close-on-blur -tags: popup, kendoreact, close, blur -ticketid: 1402574 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version3.0.0
      ProductProgress® KendoReact
      - - -## Description - -How the close the Popup when clicking outside of it? - -## Solution - -This can be done by: - -1. Add a focusable container in the Popup (the Popup has no tabIndex by default). -1. Focus the focusable container when the Popup is opened. -1. On the `onBlur` event of that element close the Popup. - -This is an example showcasing this: - -{% meta id:index height:300 %} -{% embed_file popup/close-on-blur/app.jsx preview %} -{% embed_file popup/close-on-blur/main.jsx %} -{% endmeta %} - diff --git a/docs/knowledge-base/popup-close-on-click-outside.md b/docs/knowledge-base/popup-close-on-click-outside.md deleted file mode 100644 index 4d79bea3..00000000 --- a/docs/knowledge-base/popup-close-on-click-outside.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Close the Popup by Clicking Outside -description: An example on how to close the KendoReact Popup by clicking outside. -type: how-to -page_title: Close the Popup by Clicking Outside - KendoReact Popup -slug: popup-close-on-click-outside -tags: popup, close, outside -ticketid: 1559361 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.1.0
      ProductProgress® KendoReact
      - - -## Description - -How can I close the Popup by clicking outside? - -## Solution - -Attach a global click handler that checks if the clicked element is the Popup and then close it programmatically: - -{% meta id:index height:300 %} -{% embed_file popup/close-on-click-outside/app.jsx preview %} -{% embed_file popup/close-on-click-outside/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/radial-gauge-show-value.md b/docs/knowledge-base/radial-gauge-show-value.md deleted file mode 100644 index 06d79e29..00000000 --- a/docs/knowledge-base/radial-gauge-show-value.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Show RadialGauge Value -description: Example on how to show the value of the RadialGauge -type: how-to -page_title: Show RadialGauge Value - KendoReact RadialGauge -slug: radial-gauge-show-value -position: -tags: radialgauge, gauge, value -ticketid: 1645522 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version7.3.0
      ProductProgress® KendoReact
      - -## Description - -How can I show the value of the RadialGauge in the center? - -## Solution - -This can be achieved by rendering a custom label element with the value inside that is relatively positioned: - -{% meta id height:480 %} -{% embed_file radialgauge/app.tsx preview %} -{% embed_file radialgauge/main.tsx %} -{% endmeta %} diff --git a/docs/knowledge-base/rangeslider-show-value-as-tooltip.md b/docs/knowledge-base/rangeslider-show-value-as-tooltip.md deleted file mode 100644 index 41d37b73..00000000 --- a/docs/knowledge-base/rangeslider-show-value-as-tooltip.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Show current range in the RangeSlider tooltip -description: An example on how to show the range values in the RangeSlider tooltip -type: how-to -page_title: Displaying tooltip with the range values - KendoReact RangeSlider -slug: rangeslider-show-value-as-tooltip -tags: input, inputs, rangeslider -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version5.12.0
      ProductProgress® KendoReact
      - - -## Description -I want the tooltip of the RangeSlider to show the values - -## Solution -By default, the RangeSlider start and end points will show a tooltip with "Drag" text. In order to change the default behavior the "title" property of the elements must be changed with the current value. - -This is an example showcasing how to limit the value: - -{% meta height:760 %} -{% embed_file inputs/rangeslider-show-value-as-tooltip/app.jsx preview %} -{% embed_file inputs/rangeslider-show-value-as-tooltip/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/rangeslider-slider-dots-title.md b/docs/knowledge-base/rangeslider-slider-dots-title.md deleted file mode 100644 index 3f1e61ce..00000000 --- a/docs/knowledge-base/rangeslider-slider-dots-title.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Setting The Title Of The KendoReact RangeSlider Dots -description: An example on how to set the title of the KendoReact RangeSlider dots to their dragged value. -type: how-to -page_title: Dots Title - KendoReact RangeSlider -slug: rangeslider-set-dots-title -tags: rangeslider, title, dots, range -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Versionv5.12.1
      ProductProgress® KendoReact
      - - -## Description - -I want to set the title of the RangeSlider to its dragged value. - -## Solution - -You can achieve this by passing a ref to the RangeSlider component. Use this ref to get the reference of the slider's dots, and set their title to the start and end values each time they are changed. - -{% meta id:index height:400 %} -{% embed_file inputs/rangeslider-slider-dots-title/app.jsx preview %} -{% embed_file inputs/rangeslider-slider-dots-title/main.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/render-a-custom-content-inside-the-grid-group-header.md b/docs/knowledge-base/render-a-custom-content-inside-the-grid-group-header.md deleted file mode 100644 index 33415d78..00000000 --- a/docs/knowledge-base/render-a-custom-content-inside-the-grid-group-header.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Render Custom Content inside the Grid Group Header -description: An example on how to render custom content inside the group header of the KendoReact Grid. -type: how-to -page_title: Render Custom Content in the Group Header - KendoReact Grid -slug: render-a-custom-content-inside-the-grid-group-header -tags: grid, groupheader, cell, render -ticketid: 1410259 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.16.1
      ProductProgress® KendoReact
      - - -## Description - -I want to customize the content of the Grid group header. - -## Solution - -In order to achieve this, it is currently recommended to use the ['groupHeader`]({% slug api_grid_gridcellssettings %}#toc-groupheader) property. - -{% meta id:index height:760 %} -{% embed_file grid/group-header-render/cells-header/app.jsx preview %} -{% embed_file grid/group-header-render/cells-header/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - -This can also be achieved using the Grid `cellRender` property -1. Use the [`cellRender`]({% slug api_grid_gridprops %}#toc-cellrender) prop. -1. Return a modified `td` element with the desired icon or other custom elements for the specific header. - -The following example demonstrates how to modify the `groupHeader` of the Grid. - -{% meta id:index height:760 %} -{% embed_file grid/group-header-render/app.jsx preview %} -{% embed_file grid/group-header-render/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/request-every-ten-items.md b/docs/knowledge-base/request-every-ten-items.md deleted file mode 100644 index b062da99..00000000 --- a/docs/knowledge-base/request-every-ten-items.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Make an API request on every ten scrolled items in the DropDownList -description: An example of how to make an API request after ten items are scrolled -type: how-to -page_title: Make an API request on every ten scrolled items in the DropDownList - KendoReact DropDownList -slug: request-every-ten-items -tags: dropdownlist, scrolling, api, request -ticketid: 1544377 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.13.1
      ProductProgress® KendoReact
      - - -## Description - -How to make an API call only once ten items have been scrolled in the DropDownList? - -## Solution - -This can be achieved by creating a shouldRequestData function that checks if the skip is divisible by ten - - -{% meta id height:480 %} -{% embed_file dropdownlist/request-every-ten-items/app.tsx preview %} -{% embed_file dropdownlist/request-every-ten-items/main.tsx %} -{% endmeta %} diff --git a/docs/knowledge-base/resize-table-in-the-editor.md b/docs/knowledge-base/resize-table-in-the-editor.md deleted file mode 100644 index ec4a9118..00000000 --- a/docs/knowledge-base/resize-table-in-the-editor.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Resize a Table in the Editor -description: Learn how to resize a table in the KendoReact Editor. -type: how-to -page_title: Resize a Table in the Editor - KendoReact Editor -slug: resize-table-in-the-editor -position: -tags: editor, table, resize -ticketid: 1418205 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version3.0.0
      ProductProgress® KendoReact
      - - -## Description -How to make the table elements inside the Editor resizable? - -## Solution -There is an already made plugin for [table column resizing from ProseMirror.](https://github.com/ProseMirror/prosemirror-tables) - -We have made an example of KendoReact Editor that uses the columnResizing plugin. The plugin has to be added to the plugins collection on the [onMount]({% slug api_editor_editorprops %}#toc-onmount) event: - -```jsx-no-run -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import { Editor, EditorTools, ProseMirror } from '@progress/kendo-react-editor'; - -import { columnResizing } from 'prosemirror-tables'; -const { EditorState, EditorView } = ProseMirror; - -const { - InsertTable, - AddRowBefore, AddRowAfter, AddColumnBefore, AddColumnAfter, - DeleteRow, DeleteColumn, DeleteTable, - MergeCells, SplitCell, - Undo, Redo -} = EditorTools; - -const content = - `

      some paragraph

      - - - - - - - - - - - - - - - -
      `; - -class App extends React.Component { - onMount = event => { - const state = event.viewProps.state; - const plugins = [ - ...state.plugins, - columnResizing({}) - ]; - - return new EditorView( - { mount: event.dom }, { - ...event.viewProps, - state: EditorState.create({ doc: state.doc, plugins }) - } - ); - } - - render() { - return ( - - ); - } -} -``` diff --git a/docs/knowledge-base/scheduler-decrease-slot-height.md b/docs/knowledge-base/scheduler-decrease-slot-height.md deleted file mode 100644 index 7e53265e..00000000 --- a/docs/knowledge-base/scheduler-decrease-slot-height.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Decrease the KendoReact Scheduler slot height below 40px -description: An example on how to decrease the slot height of the KendoReact Scheduler below 40px. -type: how-to -page_title: Slot Height - KendoReact Scheduler -slug: scheduler-slot-height -tags: scheduler, scheduler slot, scheduler height, scheduler slot height -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Versionv7.2.3
      ProductProgress® KendoReact
      - - -## Description - -I want to decrease the height of the Scheduler Slots. When setting the constant height by rendering a [custom view slot](https://www.telerik.com/kendo-react-ui/components/scheduler/adaptive-slot-height/#toc-constant-slot-height), the height can not be decreased below `40px`. - -## Solution - -The desired height can be achieved by setting the `min-height` property to the `.k-scheduler-cell` element. As the elements in the side-nav of the scheduler (listing the hours values) are still keeping the height of the row, it is recommended to also apply the `line-height`. - -Mind the calculation for the correct height, as the scheduler cells have 8px padding and 1px border. In order to achieve 20px height for example, use the following formula: -Desired height = 2*8px + 1px + min-height/line-height. - -In the case with `20px` total height, the formula would look like: -20px = 2*8px + 1px + 3px (where 3px is the min-height and line-height). - -```css -.k-scheduler-layout-flex .k-scheduler-cell { - min-height: 3px; - line-height: 3px; -} -``` \ No newline at end of file diff --git a/docs/knowledge-base/scheduler-export-to-ical.md b/docs/knowledge-base/scheduler-export-to-ical.md deleted file mode 100644 index ef9da72b..00000000 --- a/docs/knowledge-base/scheduler-export-to-ical.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Export the Scheduler to iCal -description: An example on how to export the KendoReact Scheduler to iCal. -type: how-to -page_title: Export the Scheduler to iCal - KendoReact Scheduler -slug: scheduler-export-to-ical -tags: scheduler, kendoreact, ical, export -ticketid: 1470194 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version3.15.0
      ProductProgress® KendoReact
      - - -## Description - -How to export the KendoReact Scheduler events to iCal? - -## Solution - -This can be done using [ical.js](https://mozilla-comm.github.io/ical.js/) to process the Scheduler data. - -This is an example demonstrating the implementation: - -{% meta id:index height:760 %} -{% embed_file scheduler/export-to-ical/app.jsx preview %} -{% embed_file scheduler/export-to-ical/main.jsx %} -{% embed_file shared/shared-events-utc.js preview %} -{% endmeta %} diff --git a/docs/knowledge-base/scheduler-get-start-end-values.md b/docs/knowledge-base/scheduler-get-start-end-values.md deleted file mode 100644 index 135b0b2c..00000000 --- a/docs/knowledge-base/scheduler-get-start-end-values.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Scheduler start and end date values -description: An example on how to retrieve the date values of the first and last slot of the KendoReact Scheduler. -type: how-to -page_title: Get the date values of the first and last slot - KendoReact Scheduler -slug: scheduler-start-end-date-values -tags: scheduler, kendoreact, start, end, slot, view -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version7.0.2
      ProductProgress® KendoReact
      - - -## Description - -I want to get the first and last date in my current Scheduler view. These start and end values should be updated when I change the view (DayView, WeekView, etc.), or when I navigate to a different date. - -## Solution - -Get these values using the `data-slot-start` and `data-slot-end` properties of the SchedulerSlot. - -First, retrieve the first and last slots using the `.k-scheduler-body .k-scheduler-cell.k-slot-cell` class, where the first item in the array represents the first slot while the last one represents the last one. This allows you to get the date value of the `data-slot-start` of the first slot, and `data-slot-end` of the last slot. This should be done in the [useEffect](https://react.dev/reference/react/useEffect) hook where the date and view should be added to the dependency array because we want the start and end dates to be updated when the view or date is updated. - -Following is an example demonstrates this approach: - -{% meta id height:500 %} -{% embed_file scheduler/start-end-dates/app.jsx preview %} -{% embed_file scheduler/start-end-dates/main.jsx %} -{% embed_file shared/shared-events-utc.js preview %} -{% endmeta %} diff --git a/docs/knowledge-base/scheduler-icon-in-group-header.md b/docs/knowledge-base/scheduler-icon-in-group-header.md deleted file mode 100644 index ed182d4d..00000000 --- a/docs/knowledge-base/scheduler-icon-in-group-header.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Add custom content with icon in Scheduler group header cell -description: An example on how to add icon in KendoReact Scheduler group header. -type: how-to -page_title: Adding Custom Content In Group Header Cell - KendoReact Scheduler -slug: scheduler-icon-in-group-header -tags: scheduler, kendoreact, group, header, cell, custom -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - - -## Description - -How can I add an icon in the group header cell of specific resource? - -## Solution - -The items in the resources data array have "text" property which accepts string and "React.Node". For placing an icon for a particular header cell you can wrap the content in DIV or SPAN element and add the custom elements. - -This is an example demonstrating the implementation: - -{% meta id:index height:700 %} -{% embed_file scheduler/icon-in-group-header/app.jsx preview %} -{% embed_file scheduler/icon-in-group-header/main.jsx %} -{% embed_file scheduler/icon-in-group-header/data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/scheduler-recurring-event-in-form-editor.md b/docs/knowledge-base/scheduler-recurring-event-in-form-editor.md deleted file mode 100644 index 5d99f42d..00000000 --- a/docs/knowledge-base/scheduler-recurring-event-in-form-editor.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Recurring event field in custom form editor -description: An example on how to show the recurring event field in the Form Editor of the KendoReact Scheduler. -type: how-to -page_title: Adding the recurring event field for the SchedulerFormEditor - KendoReact Scheduler -slug: scheduler-recurring-event-custom-editor -tags: scheduler, recurring, recurrent, editor, scheduler form -ticketid: 1609140 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.16.1
      ProductProgress® KendoReact
      - -## Description -I want to add a recurring event field in the custom form editor of the Scheduler component. - -## Solution -You can add recurring events to a custom form editor by referencing the `recurrenceEditor`. The main idea is to import the `SchedulerFormEditor` from the `@progress/kendo-react-scheduler` package, add a Field in your custom form, and reference the `recurrenceEditor` that is now available via props using the component prop. - -In the following example, when you double-click a recurring item, a Window component appears asking if you want to edit the current occurrence or the whole series - -{% meta id:index height:760 %} -{% embed_file scheduler/recurring-event-form-editor/app.jsx preview %} -{% embed_file scheduler/recurring-event-form-editor/main.jsx %} -{% embed_file scheduler/recurring-event-form-editor/custom-form-editor.jsx %} -{% embed_file scheduler/recurring-event-form-editor/custom-dialog.jsx %} -{% embed_file scheduler/recurring-event-form-editor/custom-form.jsx %} -{% embed_file scheduler/recurring-event-form-editor/custom-item.jsx %} -{% embed_file scheduler/recurring-event-form-editor/editors.jsx %} -{% embed_file scheduler/recurring-event-form-editor/data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/show-loading-indicator-in-the-kendoreact-grid.md b/docs/knowledge-base/show-loading-indicator-in-the-kendoreact-grid.md deleted file mode 100644 index 3ea5467e..00000000 --- a/docs/knowledge-base/show-loading-indicator-in-the-kendoreact-grid.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Show a Loading Indicator in the KendoReact Grid -description: An example on how to show a loading indicator in the KendoReact Grid. -type: how-to -page_title: Show a Loading Indicator in the Grid - KendoReact Grid -slug: show-loading-indicator-in-the-kendoreact-grid -position: -tags: grid -ticketid: 1422280 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version3.0.0
      ProductProgress® KendoReact
      - - -## Description -How to show a loading indicator when loading data from the server. - -## Solution -Currently, this can be done using the loading panel element. This element can be shown and hidden conditionally. - -{% meta id:index height:500 %} -{% embed_file grid/show-loading-indicator/app.jsx preview %} -{% embed_file grid/show-loading-indicator/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/slider-sliderlabel-single-click.md b/docs/knowledge-base/slider-sliderlabel-single-click.md deleted file mode 100644 index 43e2cd66..00000000 --- a/docs/knowledge-base/slider-sliderlabel-single-click.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Click on the Slider label once to change the value. -description: An example on how to change the value by clicking once on a label in the KendoReact Slider. -type: how-to -page_title: Label Single Click - KendoReact Slider -slug: slider-sliderlabel-single-click -tags: slider, sliderlabel, label -ticketid: 1616016 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.17.0
      ProductProgress® KendoReact
      - - -## Description - -By default, I need to double click the Slider labels to change the value, but how can I achieve that by clicking on them once? - -## Solution - -This can achieved by handling the component in controlled mode and handling the click event of the SliderLabel to get the clicked-on label value. You can get the value from the label when clicking it using `e.target.innerText`, set it to a state variable, and pass it to the `value` property of the Slider: - -This is an example demonstrating this implementation: - -{% meta id:index height:760 %} -{% embed_file inputs/slider-label-single-click/app.jsx preview %} -{% embed_file inputs/slider-label-single-click/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/spinner-inside-submit-button.md b/docs/knowledge-base/spinner-inside-submit-button.md deleted file mode 100644 index d59b0117..00000000 --- a/docs/knowledge-base/spinner-inside-submit-button.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Add a Spinner Inside The Form Submit Button -description: An example on how to visualise a spinner inside the form submit button after the form is submitted -type: how-to -page_title: Add a Spinner Inside The Form Submit Button on Submit - KendoReact Grid -slug: spinner-inside-submit-button -position: -tags: form, button, submit -ticketid: 1580194 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version5.5.0
      ProductProgress® KendoReact
      - -## Description -I want to visualise a spinner icon once the form has been submitted. - -## Solution -This can be achieved by using the iconClass props and conditionally changing the className to that of a spinner or loader based on the disabled variable. - -![Spinner Inside Submit Button](examples/form/spinner-inside-submit-button/spinner-inside-submit-button.gif) - -{% meta id:index height:500 %} -{% embed_file form/spinner-inside-submit-button/app.jsx preview %} -{% embed_file form/spinner-inside-submit-button/main.jsx %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/splitbutton-disable-left-part.md b/docs/knowledge-base/splitbutton-disable-left-part.md deleted file mode 100644 index 2594ad44..00000000 --- a/docs/knowledge-base/splitbutton-disable-left-part.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Disable the left part of a SplitButton -description: An example on how to disable the left part of a SplitButton -type: how-to -page_title: Disable the left part of a SplitButton - KendoReact SplitButton -slug: splitbutton-disable-left-part -position: -tags: splitbutton, disable, button -ticketid: 1635912 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version7.0.2
      ProductProgress® KendoReact
      - -## Description -I want to disable only the left part of the SplitButton. - -## Solution -You can achieve this by setting `pointer-events` to `none: - -``` -.k-button-group > .k-button:first-child:not(:only-child) { - pointer-events: none; - } - ``` - -{% meta id:index height:500 %} -{% embed_file splitbutton/disable-left-part/app.jsx preview %} -{% embed_file splitbutton/disable-left-part/main.jsx %} -{% embed_file splitbutton/disable-left-part/styles.css %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/stack-and-hide-notifications.md b/docs/knowledge-base/stack-and-hide-notifications.md deleted file mode 100644 index 66bce67f..00000000 --- a/docs/knowledge-base/stack-and-hide-notifications.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Stack Same-Type KendoReact Notifications and Hide Them after a Timeout -description: An example on how to stack KendoReact Notifications of the same type and hide them after a timeout. -type: how-to -page_title: Stack KendoReact Notifications of the Same Type and Hide Them after a Timeout - KendoReact Notification -slug: stack-and-hide-notifications -position: -tags: notification, stack, timeout, hide, grid -ticketid: 1507411 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - -
      Product Version4.5.0
      ProductProgress® KendoReact
      - - -## Description -How to stack Notifications of the same type on Grid Row click and hide them automatically after a specific timeout. - -## Solution -In order to have multiple notifications of the same type, they need to be initialized separately from each other. For example, each individual notification can be kept as a separate element in an array. The Notifications would then be dynamically generated using the JavaScript Array.map() method. -Hiding notifications can currently be done using the setTimeout function as shown in the example below. - -{% meta id:index height:480 %} -{% embed_file notification/stack-and-hide-after/app.jsx preview %} -{% embed_file notification/stack-and-hide-after/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} - -Also, there is a feature request for having a property that sets the timeout of the notifications in our portal and I can suggest voting for it as it will increase its chances of being implemented as a built-in feature: - -https://feedback.telerik.com/kendo-react-ui/1413293-add-hideafter-prop-to-the-notification-component diff --git a/docs/knowledge-base/stop-chart-animation.md b/docs/knowledge-base/stop-chart-animation.md deleted file mode 100644 index a542ecc9..00000000 --- a/docs/knowledge-base/stop-chart-animation.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Disable Chart Animations -description: An example on how to disable the animations of the KendoReact Chart. -type: how-to -page_title: Prevent Chart Animations - KendoReact Chart -slug: stop-chart-animation -tags: kendoreact, chart, animation -ticketid: 1410594 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version3.0.0
      ProductProgress® KendoReact
      - - -## Description - -I update the data of the KendoReact Chart dynamically and the user experience with the Chart animations is not good. How can I disable the animations of the KendoReact Chart? - -## Solution - -Use the [`transitions`]({% slug api_charts_chartprops %}#toc-transitions) property of the Chart. diff --git a/docs/knowledge-base/tabstrip-button-in-tabs.md b/docs/knowledge-base/tabstrip-button-in-tabs.md deleted file mode 100644 index e99a297f..00000000 --- a/docs/knowledge-base/tabstrip-button-in-tabs.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Add button in a Tab without triggering selection -description: An example on how to add a button in a Tab that will not trigger onSelect. -type: how-to -page_title: Adding Clickable Button Within A TabStripTab - KendoReact TabStrip -slug: tabstrip-button-in-tabs -tags: tabstrip, layout, kendoreact, button -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - -## Description -I want to add a button in one of my Tabs in the TabStrip, but without triggering onSelect when the button is clicked. - -## Solution -The "title" property of the TabStripTab accepts string value and React Node and for placing a button within the TabStripTab you can set React Node with the tab title and the button. Within the onClick event of the Button, call preventDefault and stopPropagation for the event to stop the event from propagating to the TabStrip. - -Following is an example demonstrating the approach: - -{% meta id height:500 %} -{% embed_file layout/tabstrip-button-in-tabs/app.jsx preview %} -{% embed_file layout/tabstrip-button-in-tabs/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/tabstrip-scrollbar-for-tabs.md b/docs/knowledge-base/tabstrip-scrollbar-for-tabs.md deleted file mode 100644 index 1d18da3f..00000000 --- a/docs/knowledge-base/tabstrip-scrollbar-for-tabs.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Introducing scrollbar for the TabStrip and the Tabs -description: An example on how to show scrollbar for the Tabs in the TabStrip or the TabStrip itself -type: how-to -page_title: Adding Scrollbar To The Tabs And The TabStrip - KendoReact TabStrip -slug: tabstrip-scrollbar-for-tabs -tags: tabstrip, layout, kendoreact, scrollbar -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - -## Description -I want to show scrollbar for the Tabs in the TabStrip. I also have a TabStrip for which I need a scrollbar for the entire content and the tabs. - -## Solution -Set className to the TabStrip and apply custom styles for changing the overflow of the rendered elements in the TabStrip. - -Following is an example with two TabStrips. The first one introduces scrollbar for the tabs and the content and the second one is with scrollbar only for the tabs. - -{% meta id height:500 %} -{% embed_file layout/tabstrip-scrollbar-for-tabs/app.jsx preview %} -{% embed_file layout/tabstrip-scrollbar-for-tabs/main.jsx %} -{% embed_file layout/tabstrip-scrollbar-for-tabs/styles.css %} -{% endmeta %} diff --git a/docs/knowledge-base/tilelayout-adapt-rowspan-content-dynamically.md b/docs/knowledge-base/tilelayout-adapt-rowspan-content-dynamically.md deleted file mode 100644 index bbdd7114..00000000 --- a/docs/knowledge-base/tilelayout-adapt-rowspan-content-dynamically.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Adapting rowSpan to Contents in TileLayout for React -description: Learn how to dynamically adjust the rowSpan value in a TileLayout based on the contents' height. -type: how-to -page_title: Adapting rowSpan to Contents in TileLayout for React | KendoReact TileLayout -slug: tilelayout-adapt-rowspan-content-dynamically -tags: tilelayout, rowSpan, content, dynamic, dynamically -res_type: kb ---- - - -## Environment - - - - - - - - - - - -
      Product Version7.0.2
      ProductProgress® KendoReact
      - -## Description -I want to adapt the `rowSpan` value in a TileLayout based on the height of its contents. Currently, I have set the `colSpan` and `rowSpan` to a static number, but this results in white space when there is less data in the grid. - -## Solution - -To dynamically adjust the `rowSpan` value based on the content height, create a function that obtains the Grid height and recalculates it based on your needs. - - -{% meta id height:500 %} -{% embed_file layout/tilelayout-adapt-rowspan-content-dynamically/app.jsx preview %} -{% embed_file layout/tilelayout-adapt-rowspan-content-dynamically/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/tooltip-in-grid.md b/docs/knowledge-base/tooltip-in-grid.md deleted file mode 100644 index ed56cdca..00000000 --- a/docs/knowledge-base/tooltip-in-grid.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Render Tooltips for Grid Cells -description: An example on how to set a KendoReact Tooltip inside the KendoReact Grid. -type: how-to -page_title: Render Tooltips for Grid Cells - KendoReact Tooltip -slug: grid_tooltip_howto -tags: tooltip, render, grid, cells -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
      ProductProgress® KendoReact
      - -## Description - -How can I render a KendoReact Tooltip inside a KendoReact Grid? - -## Solution - -Add titles to the cells of the Grid by setting the [`cell`]({% slug api_grid_gridcolumnprops %}#toc-cell) and [`headerCell`]({% slug api_grid_gridcolumnprops %}#toc-headercell) properties. - -{% meta height:450 %} -{% embed_file grid/with-tooltip/app.jsx preview %} -{% embed_file grid/with-tooltip/main.jsx %} -{% embed_file shared/shared-products.json %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-custom-columnmenu-checkboxes.md b/docs/knowledge-base/treelist-custom-columnmenu-checkboxes.md deleted file mode 100644 index d53157da..00000000 --- a/docs/knowledge-base/treelist-custom-columnmenu-checkboxes.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Add a Custom ColumnMenu Checkboxes Filter to the TreeList -description: An example on how to add a custom ColumnMenu with checkboxes in the KendoReact TreeList. -type: how-to -page_title: Add a Custom ColumnMenu With Checkboxes for a TreeList Column- KendoReact TreeList -slug: treelist-custom-columnmenu-checkboxes -tags: treelist, kendoreact, checkboxes, columnmenu -ticketid: 1511556 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.12.1
      ProductProgress® KendoReact
      - -## Description - -How can I create a custom column menu filter with checkboxes for a column in the TreeList? - -## Solution - -A custom column menu should be created through the [`filterContent`]({% slug api_datatools_columnmenuprops %}#toc-filtercontent) property to the custom filter we want to create. In the custom filter we can render a list with checkboxes, whose onChange event calls the onColumnMenuFilterChange event, which sets the state of the filter and updates the TreeList accordingly. - -{% meta id height:580 %} -{% embed_file treelist/custom-columnmenu-checkboxes/app.jsx preview %} -{% embed_file treelist/custom-columnmenu-checkboxes/main.jsx %} -{% embed_file treelist/custom-columnmenu-checkboxes/checkboxFilterColumnMenu.jsx %} -{% embed_file treelist/custom-columnmenu-checkboxes/data.js %} -{% embed_file shared/shared-treeListData.js %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-custom-date-filter.md b/docs/knowledge-base/treelist-custom-date-filter.md deleted file mode 100644 index c844f960..00000000 --- a/docs/knowledge-base/treelist-custom-date-filter.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Add a Custom ColumnMenu Date Filter to the TreeList -description: An example on how to add a custom ColumnMenu date filter in the KendoReact TreeList. -type: how-to -page_title: Add a Custom ColumnMenu Date Filter to the TreeList - KendoReact TreeList -slug: treelist-custom-date-filter -tags: treelist, kendoreact, date, columnmenu -ticketid: 1511556 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version4.4.0
      ProductProgress® KendoReact
      - -## Description - -How can I create a custom date range filter as a 'From' and 'To' filter? - -## Solution - -A custom column menu should be created through which we set the [`filterContent`]({% slug api_datatools_columnmenuprops %}#toc-filtercontent) property to the custom filter we want to create. In the custom filter we render a DatePicker, whose onChange event calls the onColumnMenuFilterChange event, which sets the state of the filter and updates the TreeList accordingly. -We set the default operators through the [`initialFilter`]({% slug api_datatools_columnmenuprops %}#toc-initialfilter) property to match those of the filter we want to create, in this case greater than and equal to ("gte") and less than and equal to ("lte"). - -{% meta id height:580 %} -{% embed_file treelist/custom-columnmenu-date-filter/app.jsx preview %} -{% embed_file treelist/custom-columnmenu-date-filter/main.jsx %} -{% embed_file treelist/custom-columnmenu-date-filter/dateColumnMenu.jsx %} -{% embed_file shared/shared-treeListData.js %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-custom-editor.md b/docs/knowledge-base/treelist-custom-editor.md deleted file mode 100644 index 70537405..00000000 --- a/docs/knowledge-base/treelist-custom-editor.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Define custom editor for the TreeList -description: An example on how to define custom editor for the TreeList. -type: how-to -page_title: Defining custom editor - KendoReact TreeList -slug: treelist-custom-editor -tags: treelist, kendoreact, editing, custom -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.12.0
      ProductProgress® KendoReact
      - -## Description -I want to change the default editor for the TreeList with one that supports maxLength - -## Solution -The TreeList columns have editCell that accepts not only the default editors that are provided in the package, but also a custom component. The following example shows how to define custom editor with input element where the maxLength attribute is set for limiting the number of characters: - -{% meta id height:580 %} -{% embed_file treelist/treelist-custom-editor/app.jsx preview %} -{% embed_file treelist/treelist-custom-editor/main.jsx preview %} -{% embed_file treelist/treelist-custom-editor/data.js preview %} -{% embed_file treelist/treelist-custom-editor/my-command-cell.jsx preview %} -{% embed_file treelist/treelist-custom-editor/MyCustomTreeListTextEditor.js preview %} -{% endmeta %} \ No newline at end of file diff --git a/docs/knowledge-base/treelist-custom-expand-cell.md b/docs/knowledge-base/treelist-custom-expand-cell.md deleted file mode 100644 index a240f68f..00000000 --- a/docs/knowledge-base/treelist-custom-expand-cell.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Define custom expand/collapse cell for the TreeList -description: An example on how to define custom cell for expanding and collapsing child nodes for the TreeList. -type: how-to -page_title: Defining custom expand/collapse cell - KendoReact TreeList -slug: treelist-custom-expand-cell -tags: treelist, kendoreact, custom, cell -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.12.0
      ProductProgress® KendoReact
      - -## Description -I want to define custom cell for the first column and I need the expand/collapse functionality - -## Solution -For achieving the desired result the custom cell should include logic for rendering the expand/collapse icon based on the props.dataItem.SUB_ITEM_FIELD length, props.expanded value and the level of the current cell. The level length is used for the empty space (based on the current level) - -{% meta id height:580 %} -{% embed_file treelist/treelist-custom-expand-cell/app.jsx preview %} -{% embed_file treelist/treelist-custom-expand-cell/main.jsx %} -{% embed_file treelist/treelist-custom-expand-cell/data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-different-row-color-per-level.md b/docs/knowledge-base/treelist-different-row-color-per-level.md deleted file mode 100644 index e978bb95..00000000 --- a/docs/knowledge-base/treelist-different-row-color-per-level.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Set different row colors for each level of the TreeList items -description: An example on how to set different color per level for the KendoReact TreeList. -type: how-to -page_title: Change the row colors based on the level - KendoReact TreeList -slug: treelist-different-row-color-per-level -tags: treelist, kendoreact, rows, color -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.09.0
      ProductProgress® KendoReact
      - -## Description -I want to have different colors for the TreeList rows based on the level of the data item. - -## Solution -For achieving the desired result the rowRender of the TreeList can used for setting custom backgroundColor for each TR element based on the "level" value of the TreeListRowProps - -Following is an example demonstrating such implementation - -{% meta id height:580 %} -{% embed_file treelist/different-row-color-per-level/app.jsx preview %} -{% embed_file treelist/different-row-color-per-level/main.jsx %} -{% embed_file treelist/different-row-color-per-level/data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-drag-and-drop.md b/docs/knowledge-base/treelist-drag-and-drop.md deleted file mode 100644 index 6ec0cb68..00000000 --- a/docs/knowledge-base/treelist-drag-and-drop.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Drag and Drop an Item between Two KendoReact TreeLists -description: An example on how to drag and drop an item between two KendoReact TreeList components. -type: how-to -page_title: Drag and Drop Items between TreeLists - KendoReact TreeList -slug: treelist-drag-and-drop -tags: treelist, kendoreact, drag, drop -ticketid: 1520227 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version4.7.0
      ProductProgress® KendoReact
      - -## Description - -How can I drag and drop item between two TreeList components? - -## Solution - -This requires the following: - -1. Use the [rowRender]({% slug api_treelist_treelistprops %}#toc-rowrender) property of the TreeList to add the drag and drop events to the rows. -1. Save the dragged item in the state during the [onDragStart](https://developer.mozilla.org/en-US/docs/Web/API/Document/dragstart_event) event. -1. During the [onDrop](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/ondrop) event update the data in both TreeList components. - -This can be seen in action in the following example: - -{% meta id height:500 %} -{% embed_file treelist/drag-and-drop/app.jsx preview %} -{% embed_file treelist/drag-and-drop/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-drag-drop-to-element.md b/docs/knowledge-base/treelist-drag-drop-to-element.md deleted file mode 100644 index 0b8567ac..00000000 --- a/docs/knowledge-base/treelist-drag-drop-to-element.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Drag and Drop an Item from KendoReact TreeLists to DIV -description: An example on how to drag and drop an item from KendoReact TreeList to HTML element. -type: how-to -page_title: Drag and Drop Item from TreeList - KendoReact TreeList -slug: treelist-drag-drop-to-element -tags: treelist, kendoreact, drag, drop -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.12.0
      ProductProgress® KendoReact
      - -## Description - -How can I drag and drop item from TreeList to a DIV element? - -## Solution - -This requires the following: - -1. Use the [rowRender]({% slug api_treelist_treelistprops %}#toc-rowrender) property of the TreeList to add the dragStart event to the rows. -1. Save the dragged item in the state during the [onDragStart](https://developer.mozilla.org/en-US/docs/Web/API/Document/dragstart_event) event. -1. During the [onDrop](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/ondrop) event of the DIV element update the dropped item. - -Following is an example with the described approach: - -{% meta id height:700 %} -{% embed_file treelist/drag-drop-to-element/app.jsx preview %} -{% embed_file treelist/drag-drop-to-element/main.jsx %} -{% embed_file treelist/drag-drop-to-element/data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-focus-input-on-edit.md b/docs/knowledge-base/treelist-focus-input-on-edit.md deleted file mode 100644 index d11ab3bd..00000000 --- a/docs/knowledge-base/treelist-focus-input-on-edit.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Set the focus to an input after opening an item for editing. -description: An example on how to focus an editor after opening an item for editing KendoReact TreeList. -type: how-to -page_title: Focus An Editor When A Row Is Opened For Editing - KendoReact TreeList -slug: treelist-focus-input-on-edit -tags: treelist, kendoreact, editing, focus -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - -## Description -I want to focus the first editor when I open a row for editing in the TreeList (after clicking on the "Edit" or "Add new" buttons). - -## Solution -Create a state variable that will hold the ID value of the currently edited or created item. Update the value within the addRecord and enterEdit functions. - -Use React Context for passing the ID value from the state to the cellRender of the TreeList. Within the cellRender check if the currently rendered cell is for the dataItem having the same ID as the stored in the state and if the cell is for the first editor (or the editor that you want to focus first), use TD's ref to focus the input within the cell. - -Following is an example demonstrating such implementation - -{% meta id height:650 %} -{% embed_file treelist/treelist-focus-input-on-edit/app.jsx preview %} -{% embed_file treelist/treelist-focus-input-on-edit/main.jsx %} -{% embed_file treelist/treelist-focus-input-on-edit/data.js %} -{% embed_file treelist/treelist-focus-input-on-edit/my-command-cell.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-locked-columns-resizing.md b/docs/knowledge-base/treelist-locked-columns-resizing.md deleted file mode 100644 index e6348953..00000000 --- a/docs/knowledge-base/treelist-locked-columns-resizing.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Avoid unwanted change in the width of TreeList columns on resizing locked columns. -description: An example on how to have stable resizing with locked columns in KendoReact TreeList. -type: how-to -page_title: Handling Resizing With Locked Columns - KendoReact TreeList -slug: treelist-locked-columns-resizing -tags: treelist, kendoreact, resizing, locked -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.14.1
      ProductProgress® KendoReact
      - -## Description -The resizing of the TreeList is not intuitive when there are locked locked. - -## Problem -Due to the way that the locked columns are rendered, having locked columns and resizing enabled at the same time will require the width of the TABLE element of the TreeList to be manually adjusted within the onColumnResize event. - -## Solution -Set the width of the TreeList through "tableProps.style.width" and set a "ref". Within "onColumnResize" event, check the table ref and use the event's totalWidth value to set it as a new width of the TABLE element - -Following is an example demonstrating such implementation - -{% meta id height:650 %} -{% embed_file treelist/treelist-locked-columns-resizing/app.jsx preview %} -{% embed_file treelist/treelist-locked-columns-resizing/main.jsx %} -{% embed_file treelist/treelist-locked-columns-resizing/data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-pager-at-bottom.md b/docs/knowledge-base/treelist-pager-at-bottom.md deleted file mode 100644 index b8e03292..00000000 --- a/docs/knowledge-base/treelist-pager-at-bottom.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Make the Pager Stick to the Bottom of the TreeList -description: An example on how to make the pager always visible and appear at the bottom of the KendoReact TreeList. -type: how-to -page_title: Make the Pager Stick to the Bottom of the TreeList - KendoReact TreeList -slug: treelist-pager-at-bottom -tags: treelist, kendoreact, pager, bottom, stick -ticketid: 1510981 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version4.5.0
      ProductProgress® KendoReact
      - - -## Description - -How can I make the pager stick to the bottom of the TreeList, even if the page size is smaller? - -## Solution - -A custom [`Pager`]({% slug pi_datatools_pagerprops %}) should be rendered below the TreeList component and the [`onPageChange`]({% slug api_datatools_pagerprops %}#toc-onpagechange) event should be handled to update accordingly the data visible on the current page. - - -{% meta id height:650 %} -{% embed_file treelist/pager-at-bottom/app.jsx preview %} -{% embed_file treelist/pager-at-bottom/main.jsx %} -{% embed_file treelist/pager-at-bottom/pager.jsx %} -{% embed_file shared/shared-treelist-data.js %} -{% endmeta %} diff --git a/docs/knowledge-base/treelist-validation.md b/docs/knowledge-base/treelist-validation.md deleted file mode 100644 index 86a7abe0..00000000 --- a/docs/knowledge-base/treelist-validation.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: TreeList Data Validation -description: An example on how to validate the data of the KendoReact TreeList with inline editing. -type: how-to -page_title: Data Validation - KendoReact TreeList -slug: treelist-data-validation -tags: treelist, data validation, validation, treelist data validation -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Versionv7.2.3
      ProductProgress® KendoReact
      - - -## Description - -I want to validate that data entered through the TreeList, whether it is newly added or modified through editing. - -## Solution - -In order to add validation to the cell that is being edited, render a custom edit cell component (using the `editCell` prop) and handle the validation based on your requirement. - -The example below demonstrates this approach where the variable `isValid` is set to `false` when the input length is less or equal to 4. Based on its value, the `valid` prop of the KendoReact Input component is set and shows a validation message. In addition, in the `save` function, the state is set only when `isValid` is set to true: - -{% meta id:index height:500 %} -{% embed_file treelist/treelist-inline-editing-validation/app.jsx preview %} -{% embed_file treelist/treelist-inline-editing-validation/main.jsx %} -{% embed_file treelist/treelist-inline-editing-validation/my-command-cell.jsx %} -{% embed_file treelist/treelist-inline-editing-validation/data.js %} -{% endmeta %} - -The above demo uses inline-editing that is explained in the below article. However, you can use any other editing approach. -- https://www.telerik.com/kendo-react-ui/components/treelist/editing/editing-inline/ \ No newline at end of file diff --git a/docs/knowledge-base/treeview-add-items-dynamically.md b/docs/knowledge-base/treeview-add-items-dynamically.md deleted file mode 100644 index fca2e8be..00000000 --- a/docs/knowledge-base/treeview-add-items-dynamically.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Dynamically Add Nodes -description: An example on how to add nodes to the KendoReact TreeView. -type: how-to -page_title: Add Nodes - KendoReact TreeView -slug: treeview-add-nodes -tags: treeview, kendoreact, add, nodes -ticketid: 1601209 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version5.12.0
      ProductProgress® KendoReact
      - - -## Description - -I want to dynamically add child Nodes to the KendoReact TreeView. - -## Solution - -You can achieve this by rendering an external Button under the TreeView which opens a Window component. In the Window component, you can render an Input and update the data with the entered input value. - -{% meta id:index height:500 %} -{% embed_file treeview/treeview-adding-nodes/app.jsx preview %} -{% embed_file treeview/treeview-adding-nodes/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/treeview-deleting.md b/docs/knowledge-base/treeview-deleting.md deleted file mode 100644 index 61c66c3f..00000000 --- a/docs/knowledge-base/treeview-deleting.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Deleting TreeView Nodes -description: An example on how delete TreeView Nodes - KendoReact TreeView. -type: how-to -page_title: Delete TreeView Nodes - KendoReact TreeView -slug: treeview-deleting -tags: treeview, kendoreact, delete, deleting, nodes -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
      ProductProgress® KendoReact
      - - -## Description -Can I delete TreeView Nodes? - -## Solution -Create custom item rendering through TreeView's "item" property. Define the custom item outside of the main component. - -Since the delete function will be within the main component where the TreeView is rendered, use React Context for passing reference to the function to the nodes. Within the custom item add a delete icon/button and on its onClick event, return the props (where the item info is accessible). - -Following is an example demonstrating the approach: - -{% meta id:index height:480 %} -{% embed_file treeview/treeview-deleting/app.jsx preview %} -{% embed_file treeview/treeview-deleting/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/treeview-editing.md b/docs/knowledge-base/treeview-editing.md deleted file mode 100644 index 17b17998..00000000 --- a/docs/knowledge-base/treeview-editing.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Edit the TreeView Nodes -description: An example on how to edit the nodes of the KendoReact TreeView. -type: how-to -page_title: Edit the Nodes - KendoReact TreeView -slug: treeview-editing -tags: treeview, kendoreact, edit, nodes -ticketid: 1408165 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
      ProductProgress® KendoReact
      - - -## Description - -How can I edit the nodes of the KendoReact TreeView? - -## Solution - -Use the [`itemRender`]({% slug api_treeview_treeviewprops %}#toc-itemrender) to render an input that is bound to the node value on click. - -{% meta id:index height:500 %} -{% embed_file treeview/treeview-editing/app.jsx preview %} -{% embed_file treeview/treeview-editing/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/treeview-search.md b/docs/knowledge-base/treeview-search.md deleted file mode 100644 index 8b69c49f..00000000 --- a/docs/knowledge-base/treeview-search.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Enable Search through the TreeView Data -description: An example on how to enable the search through the data of the KendoReact TreeView. -type: how-to -page_title: Enable the Search through the TreeView Data - KendoReact TreeView -slug: treeview-search -tags: treeview, kendoreact, search, data -ticketid: 1408162 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
      ProductProgress® KendoReact
      - - -## Description - -How can I enable the search through the data of the KendoReact TreeView? - -## Solution - -You need to have an external input and based on that input value, you can then filter the data of the TreeView. - -{% meta id:index height:500 %} -{% embed_file treeview/treeview-search/app.jsx preview %} -{% embed_file treeview/treeview-search/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/upload-change-messages.md b/docs/knowledge-base/upload-change-messages.md deleted file mode 100644 index 0236bc5b..00000000 --- a/docs/knowledge-base/upload-change-messages.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Change the default text in the Upload component -description: An example on how to change the default messages within the KendoReact Upload -type: how-to -page_title: Change The Default Messages - KendoReact Upload -slug: upload-change-messages -tags: upload, kendoreact, messages, text -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
      ProductProgress® KendoReact
      - - -## Description - -Can I change the default text displayed for the "Drop files here" and "Select files.." in the Upload component? - -## Solution - -Use the KendoReact Localization feature and its "loadMessages" and "LocalizationProvide" to replace the default messages. Full list with the messages can be found in the [`Upload Globalization`]({% slug globalization_upload %}) article. - -This is an example showcasing this: - -{% meta id:index height:400 %} -{% embed_file upload/upload-change-messages/app.jsx preview %} -{% embed_file upload/upload-change-messages/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/upload-display-logo-file-react-kendoreact.md b/docs/knowledge-base/upload-display-logo-file-react-kendoreact.md deleted file mode 100644 index 94922075..00000000 --- a/docs/knowledge-base/upload-display-logo-file-react-kendoreact.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Uploading and Displaying a Logo File in React -description: Learn how to upload a logo file and display it in the UI using React. -type: how-to -page_title: Upload and Display Logo File in React | KendoReact Knowledge Base -slug: upload-display-logo-file-react-kendoreact -tags: react, upload, display, logo, file, UI -res_type: kb ---- - -## Environment - -| Property | Value | -|----------|-------| -| Product | KendoReact | - -## Description - -To upload a logo file and display it in the UI using React, follow these steps: - -1. Use the `onAdd` method to get the raw file and set it to a state variable. -2. Pass the state variable to the `src` attribute of the `img` element. -3. Convert the file object into a string using the `createObjectURL` method. - -## Solution - -```jsx -import * as React from "react"; -import { Upload } from "@progress/kendo-react-upload"; -import "@progress/kendo-theme-default/dist/all.css"; - -const saveUrl = "https://demos.telerik.com/kendo-ui/service-v4/upload/save"; -const removeUrl = "https://demos.telerik.com/kendo-ui/service-v4/upload/remove"; - -function App() { - const [files, setFiles] = React.useState([]); - const [image, setImage] = React.useState(); - - const onAdd = (event) => { - const file = event.affectedFiles[0].getRawFile(); - setImage(file); - setFiles(event.newState); - }; - - return ( - <> - {image && alt} - - - ); -} - -export default App; -``` - -For more information on handling the `Upload` component in controlled mode using `onAdd`, `onRemove`, and other methods, refer to the [Controlled Mode](https://www.telerik.com/kendo-react-ui/components/upload/modes/#toc-controlled-mode) article. diff --git a/docs/knowledge-base/upload-icon-for-upload-button.md b/docs/knowledge-base/upload-icon-for-upload-button.md deleted file mode 100644 index a4c86fed..00000000 --- a/docs/knowledge-base/upload-icon-for-upload-button.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Show icon instead of text in the upload button -description: An example on how to show icon for the select files button in the Upload component -type: how-to -page_title: Show Icon Instead Of Text In The Select Files Button - KendoReact Upload -slug: upload-icon-for-upload-button -tags: upload, kendoreact, select, icon -ticketid: -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
      ProductProgress® KendoReact
      - - -## Description - -Can I show custom text or icon in the Upload instead of the "Select files..." text? - -## Solution - -Set custom content for the select button through the "selectMessageUI" and place the custom text or the icon. - -This is an example showcasing this: - -{% meta id:index height:360 %} -{% embed_file upload/upload-icon-for-upload-button/app.jsx preview %} -{% embed_file upload/upload-icon-for-upload-button/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/upload-paste-image-from-clipboard.md b/docs/knowledge-base/upload-paste-image-from-clipboard.md deleted file mode 100644 index 3e9b9583..00000000 --- a/docs/knowledge-base/upload-paste-image-from-clipboard.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Paste an Image for Upload from the Clipboard -description: An example on how to paste an image for upload from clipboard when working with the KendoReact Upload. -type: how-to -page_title: Paste Images for Upload from the Clipboard - KendoReact Upload -slug: upload-paste-image-from-clipboard -tags: upload, kendoreact, paste, image, clipboard -ticketid: 1468266 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - - - - - -
      Product Version3.0.0
      ProductProgress® KendoReact
      - - -## Description - -Do you have any idea how can I use Copy and Paste to automatically place pictures inside the React Upload Component? - -I want to Copy a Picture using Ctrl+C from my computer, go to the browser and Paste it via Ctrl+V, if there is a React Upload Component on the page, I need it to automatically discover the Picture that I was holding on the Ctrl+C and place it inside the component for Uploading, - -## Solution - -This will require the following setup: - -1. Add a `DIV` element that will be the paste zone. -1. Add an `onPaste` event listener to that `DIV`. -1. Handle the `onPaste` event to loop over the `clipboard data`. -1. If there are images in the clipboard data, load them into the Upload by `updating the state`. - -This is an example showcasing this: - -{% meta id:index height:650 %} -{% embed_file upload/paste-image/app.jsx preview %} -{% embed_file upload/paste-image/main.jsx %} -{% endmeta %} diff --git a/docs/knowledge-base/window-animations.md b/docs/knowledge-base/window-animations.md deleted file mode 100644 index 3cd44b72..00000000 --- a/docs/knowledge-base/window-animations.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Animate the Window -description: An example on how to Animate the KendoReact Window. -type: how-to -page_title: Animate the Window - KendoReact TreeView -slug: animate-window -tags: window, kendoreact, animation -ticketid: 1408162 -res_type: kb -category: knowledge-base ---- - -## Environment - - - - - - - - -
      ProductProgress® KendoReact
      - - -## Description - -How can I add animation to the KendoReact Window? - -## Solution - -The Window can be animated with CSS. - -```jsx-no-run - .k-window { - transform: translateY(100%); - opacity: 0; - transition-property: transform, opacity; - transition-duration: .5s; - transition-function: ease-in-out; - } - - .k-window.shown { - transform: translateY(0); - opacity: 1; - } -``` - -A runnable example is available [here.](https://stackblitz.com/edit/kendo-react-widnow-animation?file=app/main.jsx) diff --git a/docs/main.tsx b/docs/main.tsx deleted file mode 100644 index 0e1c3eb3..00000000 --- a/docs/main.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; -import React from 'react'; -import { createBrowserRouter, RouterProvider } from 'react-router-dom'; -import Index from './_app'; -import ErrorPage from './_error'; -import routes from './routes'; - -const init = async () => { - const allRoutes = await routes(); - const router = createBrowserRouter([ - { - path: "/", - element: , - errorElement: - }, - ...allRoutes - ]); - - const root = ReactDOM.createRoot( - document.querySelector('my-app') as HTMLElement - ); - - root.render( - - - - ); -}; - -init(); \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 2b091ea5..00000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,6536 +0,0 @@ -{ - "name": "vite", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "vite", - "version": "0.0.0", - "dependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "^10.0.0", - "@progress/kendo-react-barcodes": "^10.0.0", - "@progress/kendo-react-buttons": "^10.0.0", - "@progress/kendo-react-charts": "^10.0.0", - "@progress/kendo-react-common": "^10.0.0", - "@progress/kendo-react-conversational-ui": "^10.0.0", - "@progress/kendo-react-data-tools": "^10.0.0", - "@progress/kendo-react-dateinputs": "^10.0.0", - "@progress/kendo-react-dialogs": "^10.0.0", - "@progress/kendo-react-dropdowns": "^10.0.0", - "@progress/kendo-react-editor": "^10.0.0", - "@progress/kendo-react-excel-export": "^10.0.0", - "@progress/kendo-react-form": "^10.0.0", - "@progress/kendo-react-gantt": "^10.0.0", - "@progress/kendo-react-gauges": "^10.0.0", - "@progress/kendo-react-grid": "^10.0.0", - "@progress/kendo-react-indicators": "^10.0.0", - "@progress/kendo-react-inputs": "^10.0.0", - "@progress/kendo-react-intl": "^10.0.0", - "@progress/kendo-react-labels": "^10.0.0", - "@progress/kendo-react-layout": "^10.0.0", - "@progress/kendo-react-listbox": "^10.0.0", - "@progress/kendo-react-listview": "^10.0.0", - "@progress/kendo-react-map": "^10.0.0", - "@progress/kendo-react-notification": "^10.0.0", - "@progress/kendo-react-pdf": "^10.0.0", - "@progress/kendo-react-pdf-viewer": "^10.0.0", - "@progress/kendo-react-pivotgrid": "^10.0.0", - "@progress/kendo-react-popup": "^10.0.0", - "@progress/kendo-react-progressbars": "^10.0.0", - "@progress/kendo-react-ripple": "^10.0.0", - "@progress/kendo-react-scheduler": "^10.0.0", - "@progress/kendo-react-scrollview": "^10.0.0", - "@progress/kendo-react-sortable": "^10.0.0", - "@progress/kendo-react-taskboard": "^10.0.0", - "@progress/kendo-react-tooltip": "^10.0.0", - "@progress/kendo-react-treelist": "^10.0.0", - "@progress/kendo-react-treeview": "^10.0.0", - "@progress/kendo-react-upload": "^10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-bootstrap": "^10.3.1", - "@progress/kendo-theme-default": "^10.3.1", - "@progress/kendo-theme-fluent": "^10.3.1", - "@progress/kendo-theme-material": "^10.3.1", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "calculate-size": "1.1.1", - "ical.js": "^2.0.1", - "prosemirror-mentions": "^1.0.2", - "react-csv": "^2.2.2" - }, - "devDependencies": { - "@types/node": "^20.12.12", - "@vitejs/plugin-react": "^4.2.1", - "eslint": "^8.57.0", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router-dom": "^6.15.0", - "sass": "1.62.1", - "vite": "^5.2.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.26.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "peer": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@progress/jszip-esm": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@progress/jszip-esm/-/jszip-esm-1.0.4.tgz", - "integrity": "sha512-A5i26JcTosFKeHCrklarNsByW3RUJd8osRq69eskZgIaq05weTCXdpztlFMwrHpgOGods1D0WFoSQcMNE0eI8Q==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/pako-esm": "^1.0.1" - } - }, - "node_modules/@progress/kendo-charts": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-charts/-/kendo-charts-2.7.1.tgz", - "integrity": "sha512-fIAfX3U0u5HUP+k4BSQX8yZz7t2arbUYi2meHJK6i3x6xL5qQQuaa3IAL9g9NpVKNycOTm/JVtf0FhLocxWWiA==", - "license": "SEE LICENSE IN license.txt", - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.0" - } - }, - "node_modules/@progress/kendo-common": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-common/-/kendo-common-1.0.2.tgz", - "integrity": "sha512-PHxnquetSmtmXiF4dmlQiypzXaFLUEPK3VAOHxmnRDrLxaPrcZfaW9FOOiyur8hv4QmXlohISMwMElZS8Xi1Ag==", - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-data-query": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-data-query/-/kendo-data-query-1.7.1.tgz", - "integrity": "sha512-1ax6mNx1XVr5A8d9VhzuZprAq1il7oES+XwIGnLikCmkKnFk+jcBmGVksw4MKB+kcdGzQPd4RV4iO6G0kaknEA==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "tslib": "^2.8.1" - } - }, - "node_modules/@progress/kendo-data-query/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true - }, - "node_modules/@progress/kendo-date-math": { - "version": "1.5.14", - "resolved": "https://registry.npmjs.org/@progress/kendo-date-math/-/kendo-date-math-1.5.14.tgz", - "integrity": "sha512-uJDYQWIm5/kEc0SD6wG+yt2ttHE4/CfPlVhRPSYdrbNetZ1IAls/f37jCgXv7IYm6KZ5ImXlRWlwa/V1q9XXDg==", - "peer": true, - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-dateinputs-common": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-dateinputs-common/-/kendo-dateinputs-common-0.4.2.tgz", - "integrity": "sha512-4/IUH3OUyZKCm1g1XMCnPCbVZPe/mixlxHTPxFw51oR0G54J/A+stuNOjZIc9p43dOV6bsA1EOncVQsUh7d5Zw==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@progress/kendo-date-math": "^1.5.9", - "tslib": "^2.4.1" - }, - "engines": { - "node": ">=20.0.0", - "npm": ">=10.0.0" - } - }, - "node_modules/@progress/kendo-dateinputs-common/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "peer": true - }, - "node_modules/@progress/kendo-draggable": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-draggable/-/kendo-draggable-3.1.0.tgz", - "integrity": "sha512-S5AHF9uiy44um+06ABJcjZn/wpO3ZwLahd2BhiTd7NeBVPt5lkj2bjdmkd88GEIIBKmT7FOK308WUt5/MmKVTQ==" - }, - "node_modules/@progress/kendo-draggable-common": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@progress/kendo-draggable-common/-/kendo-draggable-common-0.2.3.tgz", - "integrity": "sha512-e1FraFsT7zwevswzZlQYL//K+fzmRUvkr/4emp51dzkARLDtGd95BtPNSoXYRG5xYHeueKBS75hzVwQI6Dm3Dg==", - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-drawing": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-drawing/-/kendo-drawing-1.21.2.tgz", - "integrity": "sha512-1U/0EpVRk71nOMHQVYjdNbUwuZAaTT46xY6PPrtMATPPywIenJuK+NlRQFIdcbyY7/WplHJxLdIrmOVpKJvkcw==", - "dependencies": { - "@progress/kendo-common": "^1.0.1", - "@progress/pako-esm": "^1.0.1" - } - }, - "node_modules/@progress/kendo-editor-common": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-editor-common/-/kendo-editor-common-1.12.1.tgz", - "integrity": "sha512-laOW/AJMZnx3EzSnxJx+Lyr+yyPp0d5i9MKrpUkoHMwedr660Di6jmSQyXunAQ100cFKfAHT9DblsrcRcqm4QQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-common": "^1.0.2", - "prosemirror-commands": "1.6.2", - "prosemirror-dropcursor": "1.8.1", - "prosemirror-gapcursor": "1.3.2", - "prosemirror-history": "1.4.1", - "prosemirror-inputrules": "1.4.0", - "prosemirror-keymap": "1.2.2", - "prosemirror-model": "1.24.1", - "prosemirror-schema-list": "1.5.0", - "prosemirror-state": "1.4.3", - "prosemirror-tables": "1.6.2", - "prosemirror-transform": "1.10.2", - "prosemirror-view": "1.37.1", - "tslib": "^2.8.1" - } - }, - "node_modules/@progress/kendo-editor-common/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/@progress/kendo-file-saver": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-file-saver/-/kendo-file-saver-1.1.2.tgz", - "integrity": "sha512-hWpJ67L8b2+GIhsIWR09NgGaEh87jvcHv7kScC671cbVWJycXTGqdy3ZoI0pzIaH8K0IgP2TNkF1ay4HGxe+pg==" - }, - "node_modules/@progress/kendo-inputs-common": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-inputs-common/-/kendo-inputs-common-3.1.1.tgz", - "integrity": "sha512-OqID8+2DuAnUET0W1j357qqTPvws6hnByt2h5+uVS7uK9Wmt/NHA0gVhdYmh+Jyv6Pw+S2epSk47mDsfyreKYA==", - "peer": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.17.0" - } - }, - "node_modules/@progress/kendo-inputs-common/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "peer": true - }, - "node_modules/@progress/kendo-intl": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-intl/-/kendo-intl-3.1.2.tgz", - "integrity": "sha512-rOtMppQSrScwryMfeQSOdsnRi9Oj1l08HFoEC2ticZ0T2N0/JN9CHt+fuToRx5onXK7QkcbbuNM0D09o8TeeMw==", - "peer": true - }, - "node_modules/@progress/kendo-licensing": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-licensing/-/kendo-licensing-1.5.1.tgz", - "integrity": "sha512-Hn6c8Lbyv46a07f/ehukXhj1WTOVS3CjcjDNMpb3hioubfiCPO205KIXRFHsOLVndmYCH2a27omJihYEtV9RRw==", - "hasInstallScript": true, - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "jsonwebtoken": "^9.0.2" - }, - "bin": { - "kendo-ui-license": "bin/kendo-ui-license.js" - } - }, - "node_modules/@progress/kendo-ooxml": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-ooxml/-/kendo-ooxml-1.9.1.tgz", - "integrity": "sha512-zdRYVA07rxwxxbO+G97zSg6v+cWMCFS7PcxVsvb0/JrF2/soKFvbudklPpVqZT55i0D8B3G8PKumc8fqpTtlPQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/jszip-esm": "^1.0.4", - "@progress/pako-esm": "^1.0.1" - } - }, - "node_modules/@progress/kendo-pdfviewer-common": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-pdfviewer-common/-/kendo-pdfviewer-common-0.4.0.tgz", - "integrity": "sha512-76tf5cKnQTpoFecO1KVte6aHmYznZMczcV/Y9G8z+c3E4Bjn+WgVogDvFH91fHxDL4dZx7jP4XvKkGKrfPH/pg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-common": "1.0.2", - "pdfjs-dist": "4.6.82", - "tslib": "^2.4.1" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "peerDependencies": { - "@progress/kendo-draggable": "^3.1.0", - "@progress/kendo-file-saver": "^1.1.1" - } - }, - "node_modules/@progress/kendo-pdfviewer-common/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/@progress/kendo-pivotgrid-common": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-pivotgrid-common/-/kendo-pivotgrid-common-0.6.2.tgz", - "integrity": "sha512-4suf6gLrvuuhHzhlZUO99fYDLbFIqv4zImlMNYbEP01MG1Ggca+AeVRwyWWoxhkC0lrFFOTPy3Yy29mWr4qYhQ==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@progress/kendo-data-query": "^1.5.5", - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-popup-common": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-popup-common/-/kendo-popup-common-1.9.2.tgz", - "integrity": "sha512-Gs50UafJcERiGuSP/47Yg7ftPX3HQXiK5M9zHB8sHSoc1/AEYd0/Sj5wh8UrVVBAM9b0pUTwmEuzQ/D5yDDd2Q==", - "peer": true - }, - "node_modules/@progress/kendo-react-animation": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-animation/-/kendo-react-animation-10.0.0.tgz", - "integrity": "sha512-Ws10AmDZaTf9bi6RNtpt+P4drazhtm1bmVJpgk/219OTGqy7Th+LhA3aFjhrEbyaR3Ll9N+WokHioM0HXIp0Xg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-transition-group": "^4.4.2" - } - }, - "node_modules/@progress/kendo-react-barcodes": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-barcodes/-/kendo-react-barcodes-10.0.0.tgz", - "integrity": "sha512-QJ7Uy5xq1QDjPBZUEtgNj7U4mDJZFvbZv8WXLLDL8IoEhNd7kq0RY4sJFFpYx7dI3xwazcVj1Tv7jhkMOPJeqA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-charts": "2.7.1", - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-buttons": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-buttons/-/kendo-react-buttons-10.0.0.tgz", - "integrity": "sha512-+OtE7Bz/30X3u9AwFjJHiSws/NnvcS1ghsyP8qer2P9Ya4l6x+5kCoRLPp591RdPlBFaPJUyrUNtUWM5SOOFaQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-charts": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-charts/-/kendo-react-charts-10.0.0.tgz", - "integrity": "sha512-GMQzCYLYGBsb8WyfG/kmOeA6gfNpAnfZ9FUzePl571qiTcK0f58jj9JVPKu25ItV6CB8XTKV1HlE1d5AiMeBSw==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-charts": "2.7.1", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-layout": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-common": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-common/-/kendo-react-common-10.0.0.tgz", - "integrity": "sha512-0ShIyvdcPNeV8QTT7OMThzXMVBg39WcPimW0X1dAPRUTmVT5wwWThmwcaBqLwhw2vDLcOqx6hEZN81eLQKT4JA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-draggable-common": "^0.2.3", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-conversational-ui": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-conversational-ui/-/kendo-react-conversational-ui-10.0.0.tgz", - "integrity": "sha512-hevNyIz/wHJnF+6PF5kGPjiRDKWZ+eUCgragWZ3FhXFK+BpcF7FZzNSbPkKBCqBeDfBF1G9rysnlTMUOFkbxVA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-layout": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-data-tools": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-data-tools/-/kendo-react-data-tools-10.0.0.tgz", - "integrity": "sha512-j3wNUE8wGKC3yQVaCKZio6nF8UEAOHZJpuZFBW2daP2OCMOEWJmxfsmLSrlQ2A6DXQ96zExSjNB3Ia49RJZRHQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.0.0", - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "10.0.0", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-dateinputs": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-dateinputs": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-dateinputs/-/kendo-react-dateinputs-10.0.0.tgz", - "integrity": "sha512-x1BwN4UiO6re7Ws5lyndJ0E1Uf11cNNJq9WsZMnb6T3dfZaqjS+O8cAXIlIdCzBXQWA+3R9MhvdlTSheOuFnHQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-date-math": "^1.4.0", - "@progress/kendo-dateinputs-common": "^0.4.0", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-labels": "10.0.0", - "@progress/kendo-react-layout": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-dialogs": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-dialogs/-/kendo-react-dialogs-10.0.0.tgz", - "integrity": "sha512-HmY5xzYIrQpeq3Q0Du7n8+wPHgqINm8lsdor5hYPRICTMdEDEt942EEoStjocobDpH77nENdn+XxmqgH5gek1g==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-dropdowns": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-dropdowns/-/kendo-react-dropdowns-10.0.0.tgz", - "integrity": "sha512-R5jla3numM21VAO4lqxvoGxoDp9Vv7thRlf4TCYUuzmzXeFQzfIo8xyHubtDEh+L1OQx+iPbcffS6WfqehFlhQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-labels": "10.0.0", - "@progress/kendo-react-layout": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-react-treeview": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-editor": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-editor/-/kendo-react-editor-10.0.0.tgz", - "integrity": "sha512-UXFuJb0KnY1ABRF6pO6ocAmo/3tlLt2E3F6ftDVcsyZvCQMlowu8+I+NDkh7bHJBI8aw5O68+GAfpNv3G77EoA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-editor-common": "1.12.1", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-dialogs": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-form": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-layout": "10.0.0", - "@progress/kendo-react-pdf": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-excel-export": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-excel-export/-/kendo-react-excel-export-10.0.0.tgz", - "integrity": "sha512-Y+EUslCc4OVxjkFQN0fu8dGNBPToM0uMjBgHEGlEnjMzcsWMDc7nex+8ZotMc6tBgHPABBwMitc87CAtxatUYw==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-file-saver": "^1.0.0", - "@progress/kendo-ooxml": "^1.6.3", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.0.0", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-form": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-form/-/kendo-react-form-10.0.0.tgz", - "integrity": "sha512-pMu5tPUKu0edJP2JOPTOwOejd8KaYNy/ZAHAaa0d4zapVCvBZHhTGKMi9QP+RkXAyU6FeYMm+V73HqQ7eYy3tg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-gantt": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-gantt/-/kendo-react-gantt-10.0.0.tgz", - "integrity": "sha512-x2Q+m0IU5tn9YIvZSo+QKUujkXVtUrzeLeut0I+4+IjVdFDRJHFAIYsscltAq7jxWFkwj9IDYhA2HJusbsUNgg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.0.0", - "@progress/kendo-date-math": "^1.4.1", - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-data-tools": "10.0.0", - "@progress/kendo-react-dateinputs": "10.0.0", - "@progress/kendo-react-dialogs": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-form": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-labels": "10.0.0", - "@progress/kendo-react-treelist": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-gauges": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-gauges/-/kendo-react-gauges-10.0.0.tgz", - "integrity": "sha512-KvTYu9VxF5jv2bh79XEbJotTgvRGAAeGzZdGayGaLEkQ1eIPMmZNFfQC+y7mqbBGKRdwsWLNJkYon45Ph+wTGw==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-charts": "2.7.1", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-grid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-grid/-/kendo-react-grid-10.0.0.tgz", - "integrity": "sha512-UmaMjVDZZvQoek1M51gl9BZlHrTRVv4rMsJdMNQ17y8TjhsZnLbgtX+2EjoMh4Z5H9DLpJWX6NvRPLmEfhpwyQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.0.0", - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "10.0.0", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-data-tools": "10.0.0", - "@progress/kendo-react-dateinputs": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-indicators": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-layout": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-indicators": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-indicators/-/kendo-react-indicators-10.0.0.tgz", - "integrity": "sha512-d2w6VdA/bbg3wyt8bysr3lC8O5gkcQXBm0xfrfyb6yUNbPlswXrERcOGXG6HjUsCVbEa0hFD9+rHLvRnh57RSw==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-inputs": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-inputs/-/kendo-react-inputs-10.0.0.tgz", - "integrity": "sha512-ChhTeX5RXUd4ZKdH4j2zHofBsCxGwbIrSUY6ff9ZeKxS7hIMTMt8ekmSl73kLWIUWgma2lwGxh/MaAPgM6ZXPA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-inputs-common": "^3.1.0", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "10.0.0", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-dialogs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-labels": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-intl": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-intl/-/kendo-react-intl-10.0.0.tgz", - "integrity": "sha512-LcP45bxdarp+K9J7VhBCsub2QTlZrkElbri8gNm53rnAJRetO4nDl+MFIGp87RRfMUe/dGjXXBYoUPv18v+wLg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-intl": "^3.1.1", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-labels": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-labels/-/kendo-react-labels-10.0.0.tgz", - "integrity": "sha512-BtzjU2F3vXpH015hZBlqrIs9UIFDhc1xPqwtGmUZNw/fgHQ8ourTKVCzksgbob520AjhcG6ovFPAwAZ2YMkPkQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-layout": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-layout/-/kendo-react-layout-10.0.0.tgz", - "integrity": "sha512-d06f/jH3qQckyqgSOpASgXt/tBAfdK+LOOVuXF9U+XHgYvwevFXHYyrI0T9tMtnSTWSudBeKXQKoT+7lAUtBFg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "10.0.0", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-react-progressbars": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-listbox": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-listbox/-/kendo-react-listbox-10.0.0.tgz", - "integrity": "sha512-uNYa8TPtoO9rT5ceXS+LAU8s3gYTRCNNKEqgpwRjZN471ux3whQe2e5Se28VaInsjDy79mmOqpwsdYvqrtlScQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-listview": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-listview/-/kendo-react-listview-10.0.0.tgz", - "integrity": "sha512-yzoWLO3IP/E4xDbq1eD5WZRv9WjaKr1Atx/DFzTCrNHvrr6Nl/3hZiObkVX0JBatrP3eLy8TUiSotVrH0Ykusg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-map": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-map/-/kendo-react-map-10.0.0.tgz", - "integrity": "sha512-9wb+d8YkgK7r6sUmm5pux9HyZg3M/EHB2Yyj+pIo7QrVkI8iUJUAbV6oql+fR5toCuX8ViekRrdZ2//b3x1P/w==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-charts": "2.7.1", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-notification": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-notification/-/kendo-react-notification-10.0.0.tgz", - "integrity": "sha512-Zdep9LIr/fCvEEEuCIExr66yt+QI++mC51nl5+O0C2Ti5Nx0I03OKhVaw4WtuBZLLsAJwjDxGzXJjFiIO0lG5A==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-pdf": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-pdf/-/kendo-react-pdf-10.0.0.tgz", - "integrity": "sha512-ppYNh9bGIMBPlg6OJy2p80GMiJ8+slJVOiIe98dZy88bLc7GA8nEu/U6s7Ml/EXZzF1vqn17SwOjHkaCiDCsmg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-file-saver": "^1.0.1", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-pdf-viewer": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-pdf-viewer/-/kendo-react-pdf-viewer-10.0.0.tgz", - "integrity": "sha512-gOgXoIR8M6Yu3xyBm1Qf0AoOVzktKCitVomc0qQ/wLUWMq35sJ3kOY5jd8uknO0eFEKs+HQf7hGOnAY0esNdqA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-pdfviewer-common": "0.4.0", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-file-saver": "^1.1.1", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-data-tools": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-indicators": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-upload": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-pivotgrid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-pivotgrid/-/kendo-react-pivotgrid-10.0.0.tgz", - "integrity": "sha512-XNHnYZFs5yhMTHdULb2IoaJuZKP7C/RndnhvHtG0YbVoC6v6rCokc6vPTQvDJG+WJ2ArNaWmem3hQPBTC+dwpA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.5.5", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-pivotgrid-common": "0.6.2", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-data-tools": "10.0.0", - "@progress/kendo-react-form": "10.0.0", - "@progress/kendo-react-indicators": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-labels": "10.0.0", - "@progress/kendo-react-treeview": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-popup": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-popup/-/kendo-react-popup-10.0.0.tgz", - "integrity": "sha512-9xsFhxPj5WHx6fO67B45vjVJH7pNgVx+LcH5E+7dfnBtizUX5HnACvplaBRmcg6mTehVIFlEfRy4HReRjfn/6A==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-popup-common": "^1.9.0", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-progressbars": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-progressbars/-/kendo-react-progressbars-10.0.0.tgz", - "integrity": "sha512-0vK5Steoa+boHSBGfBKGzHySGmDwVzJFmyCtPdGNk+LRPKM63sSXU5YPUZ8ic+mxR57eAyedCjZ4L8LMviiQIA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-ripple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-ripple/-/kendo-react-ripple-10.0.0.tgz", - "integrity": "sha512-nPAF1g9rtGcOfvszNF8Dcy4JH2lGgWPaO1bkTVPq54z05kfJ35ju1GrcLmwhttms64nhNZEg3dhocoj6BBblpA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-ripple": "^1.0.1", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-scheduler": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-scheduler/-/kendo-react-scheduler-10.0.0.tgz", - "integrity": "sha512-7vrUEgB2kTOijaeXkIzXsriWSQmd58FRZ3hZrUiHv3S2ZA/xKBYL08AF7XbD4Bf28qowvTMn+m4QwwvZ2sUnhg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-draggable": "^3.0.1", - "@progress/kendo-recurrence": "^1.0.1", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.5.1", - "@progress/kendo-date-math": "^1.4.1", - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-dateinputs": "10.0.0", - "@progress/kendo-react-dialogs": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-form": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-scrollview": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-scrollview/-/kendo-react-scrollview-10.0.0.tgz", - "integrity": "sha512-65d6UA++t7UcNcCy9Gipa6ftDTyKLJg+BeWbqplPnZRD+3zK+vkHt4uCjR7/y/NM3tOsi2ZHmsWHW4l+K8fsJQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-sortable": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-sortable/-/kendo-react-sortable-10.0.0.tgz", - "integrity": "sha512-1j6/kEtiR2nPROD2DzOoXWkg/y5Id9vjUsXHJUWqJ8W8m/WgBASaGVx36lN/EBb2EUgGm/WOWwzHhQx0+X4b3w==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-taskboard": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-taskboard/-/kendo-react-taskboard-10.0.0.tgz", - "integrity": "sha512-gkhgiTR7ebE9qfywA57rjIDFXI5WuYbYD7Ih6GIU5Y/EsAI/jORwf56038lFf9vfPNj2l7RW3oavRs6r0Z+CAA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.0.0", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-dialogs": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-form": "10.0.0", - "@progress/kendo-react-indicators": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-labels": "10.0.0", - "@progress/kendo-react-layout": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-tooltip": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-tooltip/-/kendo-react-tooltip-10.0.0.tgz", - "integrity": "sha512-BjZXj+jG4RMFUow0VhjxJfMaV3/5yDJv/w5zbiLrdZXS9IWBBoGVf3X2I/Lb8GsN0lxAFHGxPOktaIPlTLH7pA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-popup": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-treelist": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-treelist/-/kendo-react-treelist-10.0.0.tgz", - "integrity": "sha512-shrKjCp+kCMhmakZr5tHBnsk+7lsrnOXz6a0lltgpW5p028lscG5fEVwmk5J8EpqpoAcGVg+jtLJZzIm8E2uiA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-data-query": "^1.0.0", - "@progress/kendo-date-math": "^1.4.1", - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-data-tools": "10.0.0", - "@progress/kendo-react-dateinputs": "10.0.0", - "@progress/kendo-react-dialogs": "10.0.0", - "@progress/kendo-react-dropdowns": "10.0.0", - "@progress/kendo-react-inputs": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-treeview": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-treeview/-/kendo-react-treeview-10.0.0.tgz", - "integrity": "sha512-5tAPXWSzRAgPTv4xhpTjuGeC7Tpg4N5jX1cOl1A5b3S4wv0BFI8Br1cjJSGE76TdDpjryxY97VFhCs6edKDlFA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-react-upload": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-upload/-/kendo-react-upload-10.0.0.tgz", - "integrity": "sha512-ZAyTSl/iQV02skhDQ9Qdq5RyXO03iKyGtHgpBu4qrT8bEelMzqzEfiOIjfb8PdNsG1GivjDKfcQCV+0zpiuvxg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-buttons": "10.0.0", - "@progress/kendo-react-common": "10.0.0", - "@progress/kendo-react-intl": "10.0.0", - "@progress/kendo-react-progressbars": "10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "axios": "^1.7.4", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@progress/kendo-recurrence": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@progress/kendo-recurrence/-/kendo-recurrence-1.0.3.tgz", - "integrity": "sha512-eG4xt3WUBLuxctJN6dWhDI41hqCl60Fe6a7Pb5IX4WIEW3Y5Hhn9AntJ/X1k0oQqU/n1vxdUJJp+9TihbBYgHA==", - "dependencies": { - "@telerik/kendo-intl": "^2.0.0", - "tslib": "^1.7.0" - }, - "peerDependencies": { - "@progress/kendo-date-math": "^1.3.0" - } - }, - "node_modules/@progress/kendo-ripple": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-ripple/-/kendo-ripple-1.0.2.tgz", - "integrity": "sha512-P50uvRJntu6+iE6uno7usXcA09maA7xEJEUEVpvd/gJf/0Q1Yq0nDhmnTJiAmylvS53lYUftOyF8869B6H7/zA==", - "peer": true, - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-svg-icons": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-svg-icons/-/kendo-svg-icons-4.0.0.tgz", - "integrity": "sha512-u3JcSBm+0W4o2TTiLWe372F0we2K5GkXDDTNcqpVayi/0XxKguRuPN7Bnfv/NYPt32JM+pc6EwmWvOnUC0F8MA==" - }, - "node_modules/@progress/kendo-theme-bootstrap": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-bootstrap/-/kendo-theme-bootstrap-10.3.1.tgz", - "integrity": "sha512-Fl8835N9Hjgws0iDmbngwkOBVpsqk7aut8h8goWlYRnJmZy6CUBlbaRUgcrSmV35VZYsBa4/UIOfKU3lknilsg==", - "license": "Apache-2.0", - "dependencies": { - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-core": "10.3.1", - "@progress/kendo-theme-utils": "10.3.1" - } - }, - "node_modules/@progress/kendo-theme-core": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-core/-/kendo-theme-core-10.3.1.tgz", - "integrity": "sha512-Vg7m9rYjI2dfyJMxhF59HXZSgxq9bxVcJbgr5IlxUKikjx7o13LPTAnkOx2g1soMyzrW2wXji1AAUXUQLqGiJA==", - "license": "Apache-2.0" - }, - "node_modules/@progress/kendo-theme-default": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-default/-/kendo-theme-default-10.3.1.tgz", - "integrity": "sha512-r2UAEtg0RmaPJz9+lmYsttm23BodmhxvDsKwP6nMPsiGzKuQg6t0tX/WvVPR+js20gyB6pdLOehR/RBB/Dg/Yg==", - "license": "Apache-2.0", - "dependencies": { - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-core": "10.3.1", - "@progress/kendo-theme-utils": "10.3.1" - } - }, - "node_modules/@progress/kendo-theme-fluent": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-fluent/-/kendo-theme-fluent-10.3.1.tgz", - "integrity": "sha512-zOlYYILRBg/7DNNjVNz3aYW2hv1D1YlTPcM181aN/njGi1xU4fThsQnO5Coc6hjfDLIq6KdHBelMz7uXBwx57g==", - "license": "Apache-2.0", - "dependencies": { - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-core": "10.3.1", - "@progress/kendo-theme-utils": "10.3.1" - } - }, - "node_modules/@progress/kendo-theme-material": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-material/-/kendo-theme-material-10.3.1.tgz", - "integrity": "sha512-RXTcIzJqhUBgclfn7GYfBfSIos7csrhb4KhaMJyRTVvoQrSmXTSXEr5OzJXXl679Gomzqal0RuaLVYqitfNiOQ==", - "license": "Apache-2.0", - "dependencies": { - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-core": "10.3.1", - "@progress/kendo-theme-utils": "10.3.1" - } - }, - "node_modules/@progress/kendo-theme-utils": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-utils/-/kendo-theme-utils-10.3.1.tgz", - "integrity": "sha512-BU1VfonbsgXD02dQaPpARWo3BOTGj7bXe800hGDwIueRZoAiUgXIlSDHDFxggoh11eArE35eeIzOauWrzmbhgQ==", - "license": "Apache-2.0", - "dependencies": { - "@progress/kendo-theme-core": "10.3.1" - } - }, - "node_modules/@progress/pako-esm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@progress/pako-esm/-/pako-esm-1.0.1.tgz", - "integrity": "sha512-O4A3b1EuE9Xe1pC3Xz9Tcn1M/CYrL71f4y/5TXeytOVTkmkzBgYW97fYP2f+54H0e0erWRaqV/kUUB/a8Uxfbw==" - }, - "node_modules/@remix-run/router": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", - "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", - "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", - "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", - "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", - "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", - "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", - "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", - "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", - "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", - "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", - "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", - "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", - "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", - "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", - "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", - "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", - "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", - "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", - "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@telerik/kendo-intl": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@telerik/kendo-intl/-/kendo-intl-2.3.1.tgz", - "integrity": "sha512-30iXfS/1Kz3wn0rZLiWzrfJCv/c0Wffr5T42uxjJBTxZQ6XLBmUdfaQ4Jn1Td1W0skZrlP0M3/wNAEYTbxXigQ==" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", - "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" - }, - "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", - "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", - "dev": true, - "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC", - "optional": true - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "license": "ISC", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "peer": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", - "peer": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/calculate-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/calculate-size/-/calculate-size-1.1.1.tgz", - "integrity": "sha512-jJZ7pvbQVM/Ss3VO789qpsypN3xmnepg242cejOAslsmlZLYw2dnj7knnNowabQ0Kzabzx56KFTy2Pot/y6FmA==" - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC", - "optional": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "devOptional": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT", - "optional": true - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.66", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.66.tgz", - "integrity": "sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT", - "optional": true - }, - "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", - "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "peer": true, - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "devOptional": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "devOptional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC", - "optional": true - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ical.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ical.js/-/ical.js-2.1.0.tgz", - "integrity": "sha512-BOVfrH55xQ6kpS3muGvIXIg2l7p+eoe12/oS7R5yrO3TL/j/bLsR0PR+tYQESFbyTbvGgPHn9zQ6tI4FWyuSaQ==" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "devOptional": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", - "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "optional": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "peer": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/nan": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", - "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", - "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/orderedmap": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", - "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==" - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path2d": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.2.tgz", - "integrity": "sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pdfjs-dist": { - "version": "4.6.82", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.6.82.tgz", - "integrity": "sha512-BUOryeRFwvbLe0lOU6NhkJNuVQUp06WxlJVVCsxdmJ4y5cU3O3s3/0DunVdK1PMm7v2MUw52qKYaidhDH1Z9+w==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "canvas": "^2.11.2", - "path2d": "^0.2.1" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prosemirror-commands": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.2.tgz", - "integrity": "sha512-0nDHH++qcf/BuPLYvmqZTUUsPJUCPBUXt0J1ErTcDIS369CTp773itzLGIgIXG4LJXOlwYCr44+Mh4ii6MP1QA==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.10.2" - } - }, - "node_modules/prosemirror-dropcursor": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz", - "integrity": "sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0", - "prosemirror-view": "^1.1.0" - } - }, - "node_modules/prosemirror-gapcursor": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", - "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", - "license": "MIT", - "dependencies": { - "prosemirror-keymap": "^1.0.0", - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-view": "^1.0.0" - } - }, - "node_modules/prosemirror-history": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", - "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.31.0", - "rope-sequence": "^1.3.0" - } - }, - "node_modules/prosemirror-inputrules": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", - "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" - } - }, - "node_modules/prosemirror-keymap": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", - "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" - } - }, - "node_modules/prosemirror-mentions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/prosemirror-mentions/-/prosemirror-mentions-1.0.2.tgz", - "integrity": "sha512-d9O1IT69NQvASN4K+/ki5FaiAs5yK5qnueZiRHtlnsy80V74hVINIdDp2HQkFM26/TLZ4xbkjXTakjv4X4ZRiQ==", - "peerDependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-view": "^1.4.2" - } - }, - "node_modules/prosemirror-model": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.24.1.tgz", - "integrity": "sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg==", - "license": "MIT", - "dependencies": { - "orderedmap": "^2.0.0" - } - }, - "node_modules/prosemirror-schema-list": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.0.tgz", - "integrity": "sha512-gg1tAfH1sqpECdhIHOA/aLg2VH3ROKBWQ4m8Qp9mBKrOxQRW61zc+gMCI8nh22gnBzd1t2u1/NPLmO3nAa3ssg==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.7.3" - } - }, - "node_modules/prosemirror-state": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", - "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.27.0" - } - }, - "node_modules/prosemirror-tables": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.6.2.tgz", - "integrity": "sha512-97dKocVLrEVTQjZ4GBLdrrMw7Gv3no8H8yMwf5IRM9OoHrzbWpcH5jJxYgNQIRCtdIqwDctT1HdMHrGTiwp1dQ==", - "license": "MIT", - "dependencies": { - "prosemirror-keymap": "^1.2.2", - "prosemirror-model": "^1.24.1", - "prosemirror-state": "^1.4.3", - "prosemirror-transform": "^1.10.2", - "prosemirror-view": "^1.37.1" - } - }, - "node_modules/prosemirror-transform": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.2.tgz", - "integrity": "sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ==", - "dependencies": { - "prosemirror-model": "^1.21.0" - } - }, - "node_modules/prosemirror-view": { - "version": "1.37.1", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.37.1.tgz", - "integrity": "sha512-MEAnjOdXU1InxEmhjgmEzQAikaS6lF3hD64MveTPpjOGNTl87iRLA1HupC/DEV6YuK7m4Q9DHFNTjwIVtqz5NA==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.20.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "peer": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-csv": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-csv/-/react-csv-2.2.2.tgz", - "integrity": "sha512-RG5hOcZKZFigIGE8LxIEV/OgS1vigFQT4EkaHeKgyuCbUAu9Nbd/1RYq++bJcJJ9VOqO/n9TZRADsXNDR4VEpw==" - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-router": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", - "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", - "dev": true, - "dependencies": { - "@remix-run/router": "1.21.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", - "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", - "dev": true, - "dependencies": { - "@remix-run/router": "1.21.0", - "react-router": "6.28.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "peer": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "devOptional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", - "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.4", - "@rollup/rollup-android-arm64": "4.27.4", - "@rollup/rollup-darwin-arm64": "4.27.4", - "@rollup/rollup-darwin-x64": "4.27.4", - "@rollup/rollup-freebsd-arm64": "4.27.4", - "@rollup/rollup-freebsd-x64": "4.27.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", - "@rollup/rollup-linux-arm-musleabihf": "4.27.4", - "@rollup/rollup-linux-arm64-gnu": "4.27.4", - "@rollup/rollup-linux-arm64-musl": "4.27.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", - "@rollup/rollup-linux-riscv64-gnu": "4.27.4", - "@rollup/rollup-linux-s390x-gnu": "4.27.4", - "@rollup/rollup-linux-x64-gnu": "4.27.4", - "@rollup/rollup-linux-x64-musl": "4.27.4", - "@rollup/rollup-win32-arm64-msvc": "4.27.4", - "@rollup/rollup-win32-ia32-msvc": "4.27.4", - "@rollup/rollup-win32-x64-msvc": "4.27.4", - "fsevents": "~2.3.2" - } - }, - "node_modules/rope-sequence": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", - "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sass": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz", - "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC", - "optional": true - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC", - "optional": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT", - "optional": true - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", - "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT", - "optional": true - }, - "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", - "dev": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause", - "optional": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", - "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 5a24be6b..00000000 --- a/docs/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "vite", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" - }, - "dependencies": { - "@progress/kendo-drawing": "^1.21.2", - "@progress/kendo-licensing": "^1.5.1", - "@progress/kendo-react-animation": "^10.0.0", - "@progress/kendo-react-barcodes": "^10.0.0", - "@progress/kendo-react-buttons": "^10.0.0", - "@progress/kendo-react-charts": "^10.0.0", - "@progress/kendo-react-common": "^10.0.0", - "@progress/kendo-react-conversational-ui": "^10.0.0", - "@progress/kendo-react-data-tools": "^10.0.0", - "@progress/kendo-react-dateinputs": "^10.0.0", - "@progress/kendo-react-dialogs": "^10.0.0", - "@progress/kendo-react-dropdowns": "^10.0.0", - "@progress/kendo-react-editor": "^10.0.0", - "@progress/kendo-react-excel-export": "^10.0.0", - "@progress/kendo-react-form": "^10.0.0", - "@progress/kendo-react-gantt": "^10.0.0", - "@progress/kendo-react-gauges": "^10.0.0", - "@progress/kendo-react-grid": "^10.0.0", - "@progress/kendo-react-indicators": "^10.0.0", - "@progress/kendo-react-inputs": "^10.0.0", - "@progress/kendo-react-intl": "^10.0.0", - "@progress/kendo-react-labels": "^10.0.0", - "@progress/kendo-react-layout": "^10.0.0", - "@progress/kendo-react-listbox": "^10.0.0", - "@progress/kendo-react-listview": "^10.0.0", - "@progress/kendo-react-map": "^10.0.0", - "@progress/kendo-react-notification": "^10.0.0", - "@progress/kendo-react-pdf": "^10.0.0", - "@progress/kendo-react-pdf-viewer": "^10.0.0", - "@progress/kendo-react-pivotgrid": "^10.0.0", - "@progress/kendo-react-popup": "^10.0.0", - "@progress/kendo-react-progressbars": "^10.0.0", - "@progress/kendo-react-ripple": "^10.0.0", - "@progress/kendo-react-scheduler": "^10.0.0", - "@progress/kendo-react-scrollview": "^10.0.0", - "@progress/kendo-react-sortable": "^10.0.0", - "@progress/kendo-react-taskboard": "^10.0.0", - "@progress/kendo-react-tooltip": "^10.0.0", - "@progress/kendo-react-treelist": "^10.0.0", - "@progress/kendo-react-treeview": "^10.0.0", - "@progress/kendo-react-upload": "^10.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-bootstrap": "^10.3.1", - "@progress/kendo-theme-default": "^10.3.1", - "@progress/kendo-theme-fluent": "^10.3.1", - "@progress/kendo-theme-material": "^10.3.1", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "calculate-size": "1.1.1", - "prosemirror-mentions": "^1.0.2", - "react-csv": "^2.2.2", - "ical.js":"^2.0.1" - }, - "devDependencies": { - "@types/node": "^20.12.12", - "@vitejs/plugin-react": "^4.2.1", - "eslint": "^8.57.0", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router-dom": "^6.15.0", - "sass": "1.62.1", - "vite": "^5.2.0" - } -} diff --git a/docs/routes.tsx b/docs/routes.tsx deleted file mode 100644 index a17bd261..00000000 --- a/docs/routes.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { RouteObject } from 'react-router-dom'; - -const pages: Record = import.meta.glob('/**/app.(j|t)sx', { - import: 'default', - eager: false -}); - -const routes = async () => { - const result: RouteObject[] = []; - - for (const path of Object.keys(pages)) { - const fileName = path.match(/(.*)\/app\.(j|t)sx$/)?.[0]; - if (!fileName) { - continue; - } - - const normalizedPathName = fileName.replace(/\/app.(j|t)sx/, ''); - result.push({ - path: normalizedPathName, - lazy: async () => ({ - Component: await pages[path]() - }) - }); - } - - return result; -}; - -export default routes; \ No newline at end of file diff --git a/docs/styles.scss b/docs/styles.scss deleted file mode 100644 index 800d9b03..00000000 --- a/docs/styles.scss +++ /dev/null @@ -1,21 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ -@import '@progress/kendo-theme-default/dist/default-ocean-blue.scss'; - -div.examples-list { - max-height: none; -} - -div.examples-list .k-grid { - max-height: 900px; - overflow: scroll; - width: 100%; -} - -div.examples-list .k-grid a { - color: blue; - text-decoration: underline; -} - -div.examples-list .k-grid .k-alt { - background-color: #eee; -} \ No newline at end of file diff --git a/docs/tsconfig.json b/docs/tsconfig.json deleted file mode 100644 index 2eadd340..00000000 --- a/docs/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "jsx": "react-jsx", - "allowJs": false, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "types": ["vite/client"], - "baseUrl": ".", - "paths": { - "./shared-*": ["knowledge-base/examples/shared/shared-*"], - }, - }, - "include": ["**/**/*.js", "**/**/*.jsx", "**/**/*.ts", "**/**/*.tsx"], - "exclude": ["*.tsx"] -} diff --git a/docs/vite.config.js b/docs/vite.config.js deleted file mode 100644 index 669a6519..00000000 --- a/docs/vite.config.js +++ /dev/null @@ -1,32 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' -import path from 'path'; -import { fileURLToPath } from 'url'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], - css: { - preprocessorOptions: { - scss: { - quietDeps: true - }, - } - }, - resolve: { - alias: { - './shared-products.json': path.resolve(__dirname, './knowledge-base/examples/shared/shared-products.json'), - './shared-sample-products': path.resolve(__dirname, './knowledge-base/examples/shared/shared-sample-products'), - './shared-products-with-sections.json': path.resolve(__dirname, './knowledge-base/examples/shared/shared-products-with-sections.json'), - './shared-products-loader.jsx': path.resolve(__dirname, './knowledge-base/examples/shared/shared-products-loader.jsx'), - './shared-countries': path.resolve(__dirname, './knowledge-base/examples/shared/shared-countries'), - './shared-data': path.resolve(__dirname, './knowledge-base/examples/shared/shared-data'), - './shared-events-utc': path.resolve(__dirname, './knowledge-base/examples/shared/shared-events-utc'), - './shared-treeListData': path.resolve(__dirname, './knowledge-base/examples/shared/shared-treeListData'), - './shared-treelist-data': path.resolve(__dirname, './knowledge-base/examples/shared/shared-treelist-data'), - }, - }, -}) diff --git a/examples/kendo-react-editor-strict-csp/.gitignore b/examples/kendo-react-editor-strict-csp/.gitignore index a547bf36..aea4adca 100644 --- a/examples/kendo-react-editor-strict-csp/.gitignore +++ b/examples/kendo-react-editor-strict-csp/.gitignore @@ -22,3 +22,6 @@ dist-ssr *.njsproj *.sln *.sw? + +# package-lock file +package-lock.json diff --git a/examples/kendo-react-editor-strict-csp/package-lock.json b/examples/kendo-react-editor-strict-csp/package-lock.json deleted file mode 100644 index 7aabb61c..00000000 --- a/examples/kendo-react-editor-strict-csp/package-lock.json +++ /dev/null @@ -1,2853 +0,0 @@ -{ - "name": "kendo-react-editor-strict-csp", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "kendo-react-editor-strict-csp", - "version": "0.0.0", - "dependencies": { - "@progress/kendo-licensing": "^1.3.5", - "@progress/kendo-react-editor": "^9.0.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" - }, - "devDependencies": { - "@eslint/js": "^9.9.0", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.1", - "eslint": "^9.9.0", - "eslint-plugin-react-hooks": "^5.1.0-rc.0", - "eslint-plugin-react-refresh": "^0.4.9", - "globals": "^15.9.0", - "typescript": "^5.5.3", - "typescript-eslint": "^8.0.1", - "vite": "^5.4.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "license": "MIT", - "peer": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.19.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.4", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.15.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@progress/kendo-common": { - "version": "1.0.2", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-draggable-common": { - "version": "0.2.3", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-drawing": { - "version": "1.21.2", - "license": "See license in LICENSE.md", - "peer": true, - "dependencies": { - "@progress/kendo-common": "^1.0.1", - "@progress/pako-esm": "^1.0.1" - } - }, - "node_modules/@progress/kendo-editor-common": { - "version": "1.11.8", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-common": "^1.0.2", - "prosemirror-commands": "1.6.2", - "prosemirror-dropcursor": "1.8.1", - "prosemirror-gapcursor": "1.3.2", - "prosemirror-history": "1.4.1", - "prosemirror-inputrules": "1.4.0", - "prosemirror-keymap": "1.2.2", - "prosemirror-model": "1.23.0", - "prosemirror-schema-list": "1.4.1", - "prosemirror-state": "1.4.3", - "prosemirror-tables": "1.6.1", - "prosemirror-transform": "1.10.2", - "prosemirror-view": "1.35.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@progress/kendo-editor-common/node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD" - }, - "node_modules/@progress/kendo-file-saver": { - "version": "1.1.2", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@progress/kendo-inputs-common": { - "version": "3.1.1", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.17.0" - } - }, - "node_modules/@progress/kendo-inputs-common/node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD", - "peer": true - }, - "node_modules/@progress/kendo-intl": { - "version": "3.1.2", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@progress/kendo-licensing": { - "version": "1.3.5", - "hasInstallScript": true, - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "jsonwebtoken": "^9.0.2" - }, - "bin": { - "kendo-ui-license": "bin/kendo-ui-license.js" - } - }, - "node_modules/@progress/kendo-popup-common": { - "version": "1.9.2", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@progress/kendo-react-animation": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-transition-group": "^4.4.2" - } - }, - "node_modules/@progress/kendo-react-buttons": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-react-popup": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-common": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@progress/kendo-draggable-common": "^0.2.3", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-dialogs": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-buttons": "9.0.0", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-dropdowns": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-buttons": "9.0.0", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-react-inputs": "9.0.0", - "@progress/kendo-react-intl": "9.0.0", - "@progress/kendo-react-labels": "9.0.0", - "@progress/kendo-react-layout": "9.0.0", - "@progress/kendo-react-popup": "9.0.0", - "@progress/kendo-react-treeview": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-editor": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-editor-common": "1.11.8", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.1", - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-buttons": "9.0.0", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-react-dialogs": "9.0.0", - "@progress/kendo-react-dropdowns": "9.0.0", - "@progress/kendo-react-form": "9.0.0", - "@progress/kendo-react-inputs": "9.0.0", - "@progress/kendo-react-intl": "9.0.0", - "@progress/kendo-react-layout": "9.0.0", - "@progress/kendo-react-pdf": "9.0.0", - "@progress/kendo-react-popup": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-form": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-common": "9.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-inputs": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.1", - "@progress/kendo-inputs-common": "^3.1.0", - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-animation": "9.0.0", - "@progress/kendo-react-buttons": "9.0.0", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-react-dialogs": "9.0.0", - "@progress/kendo-react-intl": "9.0.0", - "@progress/kendo-react-labels": "9.0.0", - "@progress/kendo-react-popup": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-intl": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-intl": "^3.1.1", - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-common": "9.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-labels": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-react-intl": "9.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-layout": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-animation": "9.0.0", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-react-intl": "9.0.0", - "@progress/kendo-react-popup": "9.0.0", - "@progress/kendo-react-progressbars": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-pdf": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.21.1", - "@progress/kendo-file-saver": "^1.0.1", - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-common": "9.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-popup": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-popup-common": "^1.9.0", - "@progress/kendo-react-common": "9.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-progressbars": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-animation": "9.0.0", - "@progress/kendo-react-common": "9.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-react-treeview": { - "version": "9.0.0", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@progress/kendo-licensing": "^1.3.4", - "@progress/kendo-react-animation": "9.0.0", - "@progress/kendo-react-common": "9.0.0", - "@progress/kendo-svg-icons": "^4.0.0", - "react": "^16.8.2 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@progress/kendo-svg-icons": { - "version": "4.0.0", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@progress/pako-esm": { - "version": "1.0.1", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.27.4", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.16.0", - "@typescript-eslint/type-utils": "8.16.0", - "@typescript-eslint/utils": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.16.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "8.16.0", - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/typescript-estree": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.16.0", - "@typescript-eslint/utils": "8.16.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.16.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.16.0", - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/typescript-estree": "8.16.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.16.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "license": "BSD-3-Clause" - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.65", - "dev": true, - "license": "ISC" - }, - "node_modules/esbuild": { - "version": "0.21.5", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.9.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.15.0", - "@eslint/plugin-kit": "^0.2.3", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.5", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.1.0-rc-fb9a90fa48-20240614", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.14", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-scope": { - "version": "8.2.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "15.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.8", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "dev": true, - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/orderedmap": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prosemirror-commands": { - "version": "1.6.2", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.10.2" - } - }, - "node_modules/prosemirror-dropcursor": { - "version": "1.8.1", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0", - "prosemirror-view": "^1.1.0" - } - }, - "node_modules/prosemirror-gapcursor": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "prosemirror-keymap": "^1.0.0", - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-view": "^1.0.0" - } - }, - "node_modules/prosemirror-history": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.31.0", - "rope-sequence": "^1.3.0" - } - }, - "node_modules/prosemirror-inputrules": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" - } - }, - "node_modules/prosemirror-keymap": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" - } - }, - "node_modules/prosemirror-model": { - "version": "1.23.0", - "license": "MIT", - "dependencies": { - "orderedmap": "^2.0.0" - } - }, - "node_modules/prosemirror-schema-list": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.7.3" - } - }, - "node_modules/prosemirror-state": { - "version": "1.4.3", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.27.0" - } - }, - "node_modules/prosemirror-tables": { - "version": "1.6.1", - "license": "MIT", - "dependencies": { - "prosemirror-keymap": "^1.1.2", - "prosemirror-model": "^1.8.1", - "prosemirror-state": "^1.3.1", - "prosemirror-transform": "^1.2.1", - "prosemirror-view": "^1.13.3" - } - }, - "node_modules/prosemirror-transform": { - "version": "1.10.2", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.21.0" - } - }, - "node_modules/prosemirror-view": { - "version": "1.35.0", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.20.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "license": "MIT", - "peer": true - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.27.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.4", - "@rollup/rollup-android-arm64": "4.27.4", - "@rollup/rollup-darwin-arm64": "4.27.4", - "@rollup/rollup-darwin-x64": "4.27.4", - "@rollup/rollup-freebsd-arm64": "4.27.4", - "@rollup/rollup-freebsd-x64": "4.27.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", - "@rollup/rollup-linux-arm-musleabihf": "4.27.4", - "@rollup/rollup-linux-arm64-gnu": "4.27.4", - "@rollup/rollup-linux-arm64-musl": "4.27.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", - "@rollup/rollup-linux-riscv64-gnu": "4.27.4", - "@rollup/rollup-linux-s390x-gnu": "4.27.4", - "@rollup/rollup-linux-x64-gnu": "4.27.4", - "@rollup/rollup-linux-x64-musl": "4.27.4", - "@rollup/rollup-win32-arm64-msvc": "4.27.4", - "@rollup/rollup-win32-ia32-msvc": "4.27.4", - "@rollup/rollup-win32-x64-msvc": "4.27.4", - "fsevents": "~2.3.2" - } - }, - "node_modules/rope-sequence": { - "version": "1.3.4", - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "5.7.2", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.16.0", - "@typescript-eslint/parser": "8.16.0", - "@typescript-eslint/utils": "8.16.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vite": { - "version": "5.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -}