Skip to content

Commit f9b41b4

Browse files
authored
Merge branch '25_2' into fix_demos_code_style_25_2
2 parents 4664d33 + 42e9513 commit f9b41b4

File tree

102 files changed

+7407
-1502
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+7407
-1502
lines changed

.github/workflows/build_all.yml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ on:
66
- 'apps/**/*.md'
77
push:
88
branches: [25_2]
9+
workflow_dispatch:
10+
inputs:
11+
SBOM:
12+
description: 'Build SBOM'
13+
required: false
14+
default: false
15+
type: boolean
916

1017
jobs:
1118
build:
@@ -45,14 +52,31 @@ jobs:
4552
- name: Build npm packages
4653
run: pnpm run all:build
4754

48-
- name: Copy build artifacts
55+
- name: Upload build artifacts
4956
uses: actions/upload-artifact@v4
5057
with:
5158
name: devextreme-npm-packages
5259
path: |
5360
artifacts/npm/*.tgz
5461
retention-days: 1
5562

63+
- name: Build SBOMs
64+
if: ${{ github.event_name == 'push' || github.event.inputs.SBOM == 'true' }}
65+
env:
66+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
67+
run: |
68+
pnpm set //npm.pkg.github.com/:_authToken="$NODE_AUTH_TOKEN";
69+
pnpm nx build sbom;
70+
71+
- name: Upload SBOM artifacts
72+
if: ${{ github.event_name == 'push' || github.event.inputs.SBOM == 'true' }}
73+
uses: actions/upload-artifact@v4
74+
with:
75+
name: sbom
76+
path: |
77+
packages/sbom/dist/**/*
78+
retention-days: 1
79+
5680
custom_bundles:
5781
runs-on: devextreme-shr2
5882
needs: build

.github/workflows/demos_visual_tests.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ jobs:
8888
steps:
8989
- name: Determine framework tests scope
9090
id: determine
91-
run: |
91+
run: |
9292
if [ "${{ github.event_name }}" != "pull_request" ] || [ "${{ contains(github.event.pull_request.labels.*.name, 'force all tests') }}" = "true" ]; then
9393
echo "Framework tests scope: all demos"
9494
echo "framework-tests-scope=all" >> $GITHUB_OUTPUT
@@ -110,7 +110,7 @@ jobs:
110110
needs.determine-framework-tests-scope.result == 'success'
111111
env:
112112
NODE_OPTIONS: --max-old-space-size=8192
113-
timeout-minutes: 20
113+
timeout-minutes: 30
114114

115115
steps:
116116
- name: Get sources
@@ -603,12 +603,12 @@ jobs:
603603
id: chrome-flags
604604
run: |
605605
BASE_FLAGS="chrome:headless --window-size=1200,800 --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl=swiftshader --disable-features=PaintHolding --js-flags=--random-seed=2147483647"
606-
606+
607607
# For Material theme, enable better font rendering to avoid instability
608608
if [[ "${{ matrix.THEME }}" != *"material"* ]]; then
609609
BASE_FLAGS="$BASE_FLAGS --font-render-hinting=none --disable-font-subpixel-positioning"
610610
fi
611-
611+
612612
echo "flags=$BASE_FLAGS" >> $GITHUB_OUTPUT
613613
614614
- name: Run TestCafe tests (jQuery)

.github/workflows/packages_publishing.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ jobs:
8686
mkdir -p ./artifacts/deps-scanner
8787
cp reportGithub.json ./artifacts/deps-scanner/
8888
89+
- name: Build SBOMs
90+
env:
91+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
92+
run: |
93+
pnpm set //npm.pkg.github.com/:_authToken="$NODE_AUTH_TOKEN";
94+
pnpm nx build sbom;
95+
8996
- name: Build artifacts package
9097
run: npx ts-node tools/scripts/make-artifacts-package
9198

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
The DevExtreme Chat allows users to attach files. When this feature is activated ([fileUploaderOptions](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#fileUploaderOptions).**uploadFile** is specified), an “Attach” button appears in the message input field, allowing users to add files to their messages.
2+
3+
When users attach files, each file is displayed in the input area with a file-type icon, basic details (name and size), upload status, and an option to remove files before sending.
4+
<!--split-->
5+
6+
You can customize the file upload process with the following [fileUploaderOptions](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#fileUploaderOptions) properties:
7+
8+
- **maxFileSize**
9+
Specifies maximum allowed file size.
10+
- **minFileSize**
11+
Specifies minimum allowed file size.
12+
- **multiple**
13+
When set to `false`, limits uploads to a single file.
14+
- **allowedFileExtensions**
15+
Restricts accepted file types.
16+
17+
For the complete list of configuration options, refer to the following API section: [fileUploaderOptions](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#fileUploaderOptions).
18+
19+
[Attachment](/Documentation/ApiReference/UI_Components/dxChat/Types/Attachment/) type includes `name` and `size` fields. To add custom fields (such as `url` in this demo), handle the [onMessageEntered](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#onMessageEntered) event and update the message object’s [attachments](/Documentation/ApiReference/UI_Components/dxChat/Types/TextMessage/#attachments) array as needed. You can use this handler to save files to your server.
20+
21+
After a user sends a message, attachments appear in the corresponding message bubble. To allow users to download attachments, implement the [onAttachmentDownloadClick](/Documentation/ApiReference/UI_Components/dxChat/Configuration/#onAttachmentDownloadClick) event handler. You can define custom download logic within the handler.
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
The DevExtreme Form ships with AI-powered **Smart Paste** functionality. When a user copies unstructured text from external sources such as documents, spreadsheets, web pages, or emails, **Smart Paste** processes the clipboard data and populates related form fields.
1+
The DevExtreme Form ships with AI-powered **Smart Paste** functionality. When a user copies unstructured text from external sources such as documents, spreadsheets, web pages, or emails, **Smart Paste** processes clipboard data and populates related form fields automatically.
22
<!--split-->
33

4-
Use the following APIs to enable **Smart Paste** in the Form component:
4+
Use the following APIs to activate **Smart Paste** in our Form component:
55

66
- [aiIntegration](/Documentation/ApiReference/UI_Components/dxForm/Configuration/#aiIntegration) - accepts an [AIIntegration](/Documentation/ApiReference/Common_Types/AIIntegration/) object that contains AI Service settings.
7-
- *'smartPaste'* – adds a built-in **Smart Paste** button to the Form (see [name](/Documentation/ApiReference/UI_Components/dxForm/Types/#FormPredefinedButtonItem) for more details). To initiate this functionality from code, call the [smartPaste(text)](/Documentation/ApiReference/UI_Components/dxForm/Methods/#smartPastetext) method. This demo shows how to use this method to implement a custom shortcut that activates **Smart Paste**.
7+
- *'smartPaste'* – adds a built-in **Smart Paste** button to the Form (see [name](/Documentation/ApiReference/UI_Components/dxForm/Types/#FormPredefinedButtonItem) for additional information). To use this capability in code, call the [smartPaste(text)](/Documentation/ApiReference/UI_Components/dxForm/Methods/#smartPastetext) method. This sample leverages this method and implements a custom shortcut to activate **Smart Paste**.
88

99
Configure each Form item using [aiOptions](/Documentation/ApiReference/UI_Components/dxForm/Item_Types/SimpleItem/aiOptions/):
1010
- **disabled** - prevents AI-generated text from being pasted into this item.
11-
- **instruction** - specifies the item instruction for the AI service.
11+
- **instruction** - specifies item instruction for the AI service.

apps/demos/Demos/Scheduler/Agenda/Angular/app/app.component.html

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,4 @@
2323
icon="tags"
2424
>
2525
</dxi-scheduler-resource>
26-
27-
<dxo-scheduler-editing>
28-
<dxo-scheduler-form>
29-
<dxi-scheduler-item name="mainGroup">
30-
<dxi-scheduler-item name="subjectGroup"></dxi-scheduler-item>
31-
<dxi-scheduler-item name="dateGroup"></dxi-scheduler-item>
32-
<dxi-scheduler-item name="repeatGroup"></dxi-scheduler-item>
33-
<dxi-scheduler-item name="resourcesGroup">
34-
<dxi-scheduler-item
35-
name="assigneeIdGroup"
36-
[colCount]="3"
37-
[colCountByScreen]="{ xs: 3 }"
38-
>
39-
<dxi-scheduler-item name="assigneeIdIcon"></dxi-scheduler-item>
40-
<dxi-scheduler-item name="assigneeId"></dxi-scheduler-item>
41-
<dxi-scheduler-item name="priorityId"></dxi-scheduler-item>
42-
</dxi-scheduler-item>
43-
</dxi-scheduler-item>
44-
<dxi-scheduler-item name="descriptionGroup"></dxi-scheduler-item>
45-
</dxi-scheduler-item>
46-
<dxi-scheduler-item name="recurrenceGroup"></dxi-scheduler-item>
47-
</dxo-scheduler-form>
48-
</dxo-scheduler-editing>
4926
</dx-scheduler>

apps/demos/Demos/Scheduler/Agenda/React/App.tsx

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import React from 'react';
22
import Scheduler, {
33
Resource,
4-
Editing,
5-
Form as SchedulerForm,
6-
Item,
74
type SchedulerTypes,
85
} from 'devextreme-react/scheduler';
96
import ArrayStore from 'devextreme/data/array_store';
@@ -39,25 +36,6 @@ const App = () => (
3936
label="Priority"
4037
icon="tags"
4138
/>
42-
43-
<Editing>
44-
<SchedulerForm>
45-
<Item name="mainGroup">
46-
<Item name="subjectGroup" />
47-
<Item name="dateGroup" />
48-
<Item name="repeatGroup" />
49-
<Item name="resourcesGroup">
50-
<Item name="assigneeIdGroup" colCount={3} colCountByScreen={{ xs: 3 }}>
51-
<Item name="assigneeIdIcon" />
52-
<Item name="assigneeId" />
53-
<Item name="priorityId" />
54-
</Item>
55-
</Item>
56-
<Item name="descriptionGroup" />
57-
</Item>
58-
<Item name="recurrenceGroup" />
59-
</SchedulerForm>
60-
</Editing>
6139
</Scheduler>
6240
);
6341

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
import React from 'react';
2-
import Scheduler, {
3-
Resource,
4-
Editing,
5-
Form as SchedulerForm,
6-
Item,
7-
} from 'devextreme-react/scheduler';
2+
import Scheduler, { Resource } from 'devextreme-react/scheduler';
83
import ArrayStore from 'devextreme/data/array_store';
94
import { assignees, data, priorities } from './data.js';
105

@@ -38,29 +33,6 @@ const App = () => (
3833
label="Priority"
3934
icon="tags"
4035
/>
41-
42-
<Editing>
43-
<SchedulerForm>
44-
<Item name="mainGroup">
45-
<Item name="subjectGroup" />
46-
<Item name="dateGroup" />
47-
<Item name="repeatGroup" />
48-
<Item name="resourcesGroup">
49-
<Item
50-
name="assigneeIdGroup"
51-
colCount={3}
52-
colCountByScreen={{ xs: 3 }}
53-
>
54-
<Item name="assigneeIdIcon" />
55-
<Item name="assigneeId" />
56-
<Item name="priorityId" />
57-
</Item>
58-
</Item>
59-
<Item name="descriptionGroup" />
60-
</Item>
61-
<Item name="recurrenceGroup" />
62-
</SchedulerForm>
63-
</Editing>
6436
</Scheduler>
6537
);
6638
export default App;

apps/demos/Demos/Scheduler/Agenda/Vue/App.vue

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,12 @@
2222
label="Priority"
2323
icon="tags"
2424
/>
25-
26-
<DxEditing>
27-
<DxSchedulerForm>
28-
<DxItem name="mainGroup">
29-
<DxItem name="subjectGroup"/>
30-
<DxItem name="dateGroup"/>
31-
<DxItem name="repeatGroup"/>
32-
<DxItem name="resourcesGroup">
33-
<DxItem
34-
:col-count="3"
35-
:col-count-by-screen="{ xs: 3 }"
36-
name="assigneeIdGroup"
37-
>
38-
<DxItem name="assigneeIdIcon"/>
39-
<DxItem name="assigneeId"/>
40-
<DxItem name="priorityId"/>
41-
</DxItem>
42-
</DxItem>
43-
<DxItem name="descriptionGroup"/>
44-
</DxItem>
45-
<DxItem name="recurrenceGroup"/>
46-
</DxSchedulerForm>
47-
</DxEditing>
4825
</DxScheduler>
4926
</template>
5027
<script setup lang="ts">
5128
import DxScheduler, {
5229
DxResource,
53-
DxEditing,
54-
DxForm as DxSchedulerForm,
5530
} from 'devextreme-vue/scheduler';
56-
import { DxItem } from 'devextreme-vue/form';
5731
import { ArrayStore } from 'devextreme-vue/common/data';
5832
import { data, assignees, priorities } from './data.ts';
5933

apps/demos/Demos/Scheduler/Agenda/jQuery/index.js

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,6 @@ $(() => {
2323
label: 'Priority',
2424
icon: 'tags',
2525
}],
26-
editing: {
27-
form: {
28-
items: [
29-
{
30-
name: 'mainGroup',
31-
items: [
32-
'subjectGroup',
33-
'dateGroup',
34-
'repeatGroup',
35-
{
36-
name: 'resourcesGroup',
37-
items: [
38-
{
39-
name: 'assigneeIdGroup',
40-
colCount: 3,
41-
colCountByScreen: {
42-
xs: 3,
43-
},
44-
items: ['assigneeIdIcon', 'assigneeId', 'priorityId'],
45-
},
46-
],
47-
},
48-
'descriptionGroup',
49-
],
50-
},
51-
'recurrenceGroup',
52-
],
53-
},
54-
},
5526
height: 600,
5627
});
5728
});

0 commit comments

Comments
 (0)