@qoretechnologies/reqore 0.37.9 → 0.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/__tests__/dropdown.test.tsx +10 -8
  2. package/__tests__/table.test.tsx +0 -1
  3. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  4. package/dist/components/Breadcrumbs/index.js +6 -4
  5. package/dist/components/Breadcrumbs/index.js.map +1 -1
  6. package/dist/components/Button/index.d.ts.map +1 -1
  7. package/dist/components/Button/index.js +5 -5
  8. package/dist/components/Button/index.js.map +1 -1
  9. package/dist/components/ControlGroup/index.d.ts.map +1 -1
  10. package/dist/components/ControlGroup/index.js +1 -1
  11. package/dist/components/ControlGroup/index.js.map +1 -1
  12. package/dist/components/Drawer/index.d.ts +1 -1
  13. package/dist/components/Drawer/index.d.ts.map +1 -1
  14. package/dist/components/Dropdown/index.d.ts +2 -2
  15. package/dist/components/Dropdown/index.d.ts.map +1 -1
  16. package/dist/components/Dropdown/index.js +5 -5
  17. package/dist/components/Dropdown/index.js.map +1 -1
  18. package/dist/components/Dropdown/item.d.ts +6 -5
  19. package/dist/components/Dropdown/item.d.ts.map +1 -1
  20. package/dist/components/Dropdown/item.js +14 -6
  21. package/dist/components/Dropdown/item.js.map +1 -1
  22. package/dist/components/Dropdown/list.d.ts +4 -2
  23. package/dist/components/Dropdown/list.d.ts.map +1 -1
  24. package/dist/components/Dropdown/list.js +33 -7
  25. package/dist/components/Dropdown/list.js.map +1 -1
  26. package/dist/components/Effect/index.d.ts +1 -0
  27. package/dist/components/Effect/index.d.ts.map +1 -1
  28. package/dist/components/Effect/index.js +39 -24
  29. package/dist/components/Effect/index.js.map +1 -1
  30. package/dist/components/InternalPopover/index.d.ts.map +1 -1
  31. package/dist/components/InternalPopover/index.js +21 -1
  32. package/dist/components/InternalPopover/index.js.map +1 -1
  33. package/dist/components/Menu/index.js +4 -4
  34. package/dist/components/Menu/index.js.map +1 -1
  35. package/dist/components/Menu/item.d.ts +1 -1
  36. package/dist/components/Menu/item.d.ts.map +1 -1
  37. package/dist/components/Menu/item.js +6 -6
  38. package/dist/components/Menu/item.js.map +1 -1
  39. package/dist/components/Message/index.d.ts.map +1 -1
  40. package/dist/components/Message/index.js +3 -4
  41. package/dist/components/Message/index.js.map +1 -1
  42. package/dist/components/MultiSelect/index.js +2 -2
  43. package/dist/components/MultiSelect/index.js.map +1 -1
  44. package/dist/components/Notifications/notification.d.ts +1 -0
  45. package/dist/components/Notifications/notification.d.ts.map +1 -1
  46. package/dist/components/Notifications/notification.js +10 -21
  47. package/dist/components/Notifications/notification.js.map +1 -1
  48. package/dist/components/Panel/LabelEditor.d.ts +12 -0
  49. package/dist/components/Panel/LabelEditor.d.ts.map +1 -0
  50. package/dist/components/Panel/LabelEditor.js +61 -0
  51. package/dist/components/Panel/LabelEditor.js.map +1 -0
  52. package/dist/components/Panel/index.d.ts +11 -1
  53. package/dist/components/Panel/index.d.ts.map +1 -1
  54. package/dist/components/Panel/index.js +65 -22
  55. package/dist/components/Panel/index.js.map +1 -1
  56. package/dist/components/Tabs/content.d.ts +4 -2
  57. package/dist/components/Tabs/content.d.ts.map +1 -1
  58. package/dist/components/Tabs/content.js +22 -5
  59. package/dist/components/Tabs/content.js.map +1 -1
  60. package/dist/components/Textarea/index.d.ts +4 -0
  61. package/dist/components/Textarea/index.d.ts.map +1 -1
  62. package/dist/components/Textarea/index.js +20 -5
  63. package/dist/components/Textarea/index.js.map +1 -1
  64. package/package.json +1 -1
  65. package/src/components/Breadcrumbs/index.tsx +19 -5
  66. package/src/components/Button/index.tsx +12 -11
  67. package/src/components/ControlGroup/index.tsx +1 -0
  68. package/src/components/Drawer/index.tsx +1 -1
  69. package/src/components/Dropdown/index.tsx +16 -14
  70. package/src/components/Dropdown/item.tsx +26 -10
  71. package/src/components/Dropdown/list.tsx +80 -30
  72. package/src/components/Effect/index.tsx +46 -15
  73. package/src/components/InternalPopover/index.tsx +24 -1
  74. package/src/components/Menu/index.tsx +2 -2
  75. package/src/components/Menu/item.tsx +93 -85
  76. package/src/components/Message/index.tsx +39 -35
  77. package/src/components/MultiSelect/index.tsx +2 -2
  78. package/src/components/Notifications/notification.tsx +34 -30
  79. package/src/components/Panel/LabelEditor.tsx +67 -0
  80. package/src/components/Panel/index.tsx +99 -25
  81. package/src/components/Tabs/content.tsx +44 -7
  82. package/src/components/Textarea/index.tsx +77 -27
  83. package/src/mock/breadcrumbs.ts +12 -1
  84. package/src/stories/Dropdown/Dropdown.stories.tsx +58 -0
  85. package/src/stories/Dropdown/DropdownTests.stories.tsx +78 -0
  86. package/src/stories/Message/Message.stories.tsx +13 -5
  87. package/src/stories/MultiSelect/MultiSelect.stories.tsx +2 -2
  88. package/src/stories/Panel/Panel.stories.tsx +123 -0
  89. package/src/stories/Popover/Popover.stories.tsx +41 -0
  90. package/src/stories/TextArea/TextArea.stories.tsx +49 -0
  91. package/src/stories/TextArea/TextAreaTests.stories.tsx +103 -0
  92. package/tests.json +1 -1
@@ -43,13 +43,13 @@ type Story = StoryObj<typeof meta>;
43
43
 
44
44
  const Template: StoryFn<IReqoreMultiSelectProps> = (args: IReqoreMultiSelectProps) => {
45
45
  const [selected, setSelected] = useState<string[]>([
46
- 'Existing item 1',
47
46
  'Existing item 3',
48
47
  'Disabled item',
49
- 'Minimal item with border',
50
48
  'itemWithNoLabel',
51
49
  ]);
52
50
 
51
+ console.log({ selected });
52
+
53
53
  return (
54
54
  <ReqoreMultiSelect
55
55
  value={selected}
@@ -1,4 +1,5 @@
1
1
  import { StoryFn, StoryObj } from '@storybook/react';
2
+ import { fireEvent } from '@storybook/testing-library';
2
3
  import { noop } from 'lodash';
3
4
  import ReqoreControlGroup from '../../components/ControlGroup';
4
5
  import ReqoreInput, { IReqoreInputProps } from '../../components/Input';
@@ -358,6 +359,103 @@ export const Minimal: Story = {
358
359
  },
359
360
  };
360
361
 
362
+ export const MinimalOnlyContent: Story = {
363
+ render: Template,
364
+
365
+ args: {
366
+ label: undefined,
367
+ badge: undefined,
368
+ icon: undefined,
369
+ minimal: true,
370
+ actions: [
371
+ { label: 'test', show: false },
372
+ {
373
+ show: false,
374
+ group: [
375
+ { label: 'test 2', show: true },
376
+ { label: 'test 3', show: true },
377
+ ],
378
+ },
379
+ ],
380
+ bottomActions: [
381
+ { label: 'test', show: false, position: 'left' },
382
+ {
383
+ position: 'right',
384
+ show: false,
385
+ group: [
386
+ { label: 'test 2', show: true },
387
+ { label: 'test 3', show: true },
388
+ ],
389
+ },
390
+ ],
391
+ collapsible: false,
392
+ },
393
+ };
394
+
395
+ export const MinimalOnlyTopBar: Story = {
396
+ render: Template,
397
+
398
+ args: {
399
+ label: undefined,
400
+ badge: undefined,
401
+ icon: undefined,
402
+ minimal: true,
403
+ bottomActions: [
404
+ { label: 'test', show: false, position: 'left' },
405
+ {
406
+ position: 'right',
407
+ show: false,
408
+ group: [
409
+ { label: 'test 2', show: true },
410
+ { label: 'test 3', show: true },
411
+ ],
412
+ },
413
+ ],
414
+ collapsible: false,
415
+ },
416
+ };
417
+
418
+ export const MinimalOnlyBottomBar: Story = {
419
+ render: Template,
420
+
421
+ args: {
422
+ label: undefined,
423
+ badge: undefined,
424
+ icon: undefined,
425
+ minimal: true,
426
+ actions: [
427
+ { label: 'test', show: false },
428
+ {
429
+ show: false,
430
+ group: [
431
+ { label: 'test 2', show: true },
432
+ { label: 'test 3', show: true },
433
+ ],
434
+ },
435
+ ],
436
+ collapsible: false,
437
+ },
438
+ };
439
+
440
+ export const MinimalWithIntent: Story = {
441
+ render: Template,
442
+
443
+ args: {
444
+ minimal: true,
445
+ flat: true,
446
+ intent: 'info',
447
+ transparent: true,
448
+ },
449
+ };
450
+
451
+ export const WithOpacity: Story = {
452
+ render: Template,
453
+
454
+ args: {
455
+ opacity: 0.5,
456
+ },
457
+ };
458
+
361
459
  export const Disabled: Story = {
362
460
  render: Template,
363
461
 
@@ -615,3 +713,28 @@ export const WithEffect: Story = {
615
713
  headerSize: 2,
616
714
  },
617
715
  };
716
+
717
+ export const Resizable: Story = {
718
+ render: Template,
719
+
720
+ args: {
721
+ resizable: {
722
+ minWidth: 400,
723
+ maxWidth: 600,
724
+ defaultSize: { width: 400, height: '100%' },
725
+ enable: { right: true },
726
+ },
727
+ },
728
+ };
729
+
730
+ export const EditableLabel: Story = {
731
+ render: Template,
732
+
733
+ args: {
734
+ onLabelEdit: (label) => console.log(label),
735
+ badge: undefined,
736
+ },
737
+ play: async ({ canvasElement }) => {
738
+ await fireEvent.click(canvasElement.querySelector('.reqore-label-editor'));
739
+ },
740
+ };
@@ -1,15 +1,20 @@
1
1
  import { StoryFn, StoryObj } from '@storybook/react';
2
+ import { fireEvent } from '@storybook/testing-library';
2
3
  import { useState } from 'react';
3
4
  import { IReqorePopoverProps } from '../../components/Popover';
5
+ import { sleep } from '../../helpers/utils';
4
6
  import usePopover from '../../hooks/usePopover';
5
7
  import {
6
8
  ReqoreButton,
7
9
  ReqoreControlGroup,
10
+ ReqoreMenu,
11
+ ReqoreMenuItem,
8
12
  ReqoreMessage,
9
13
  ReqoreModal,
10
14
  ReqorePanel,
11
15
  ReqorePopover,
12
16
  ReqoreSpacer,
17
+ ReqoreTextarea,
13
18
  } from '../../index';
14
19
  import { StoryMeta } from '../utils';
15
20
  import { FlatArg, argManager } from '../utils/args';
@@ -393,3 +398,39 @@ export const BlurredInsideModal: Story = {
393
398
  animatedDialogs: false,
394
399
  },
395
400
  };
401
+
402
+ export const ChangingElement: Story = {
403
+ render: (args) => {
404
+ return <ReqoreTextarea scaleWithContent tooltip={args} />;
405
+ },
406
+
407
+ args: {
408
+ content: (
409
+ <ReqoreMenu>
410
+ <ReqoreMenuItem label='Item 1' />
411
+ <ReqoreMenuItem label='Item 2' />
412
+ <ReqoreMenuItem label='Item 3' />
413
+ <ReqoreMenuItem label='Item 4' />
414
+ <ReqoreMenuItem label='Item 5' />
415
+ <ReqoreMenuItem label='Item 6' />
416
+ </ReqoreMenu>
417
+ ),
418
+ handler: 'focus',
419
+ noArrow: true,
420
+ noWrapper: true,
421
+ useTargetWidth: true,
422
+ },
423
+
424
+ play: async ({ canvasElement }) => {
425
+ const textarea = canvasElement.querySelector('textarea');
426
+ await sleep(1000);
427
+ fireEvent.focusIn(textarea);
428
+ await sleep(1000);
429
+ fireEvent.change(textarea, {
430
+ target: {
431
+ value:
432
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl eget aliquam tincidunt, nunc nisl aliquet nunc, quis aliquam nisl nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl eget aliquam tincidunt, nunc nisl aliquet nunc, quis aliquam nisl nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl eget aliquam tincidunt, nunc nisl aliquet nunc, quis aliquam nisl nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl eget aliquam tincidunt, nunc nisl aliquet nunc, quis aliquam nisl nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl eget aliquam tincidunt, nunc nisl aliquet nunc, quis aliquam nisl nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl eget aliquam tincidunt, nunc nisl aliquet nunc, quis aliquam nisl nisl.',
433
+ },
434
+ });
435
+ },
436
+ };
@@ -1,6 +1,9 @@
1
+ import { expect } from '@storybook/jest';
1
2
  import { StoryFn, StoryObj } from '@storybook/react';
3
+ import { fireEvent } from '@storybook/testing-library';
2
4
  import { useState } from 'react';
3
5
  import { IReqoreTextareaProps } from '../../components/Textarea';
6
+ import { sleep } from '../../helpers/utils';
4
7
  import { ReqoreControlGroup, ReqoreTextarea } from '../../index';
5
8
  import { StoryMeta } from '../utils';
6
9
  import { DisabledArg, MinimalArg, SizeArg, argManager } from '../utils/args';
@@ -236,3 +239,49 @@ export const Effect: Story = {
236
239
  },
237
240
  },
238
241
  };
242
+
243
+ export const WithTemplates: Story = {
244
+ render: (args) => <ReqoreTextarea {...args} />,
245
+
246
+ args: {
247
+ templates: {
248
+ handler: 'focus',
249
+ useTargetWidth: true,
250
+ noWrapper: true,
251
+ items: [
252
+ {
253
+ label: 'New message in discord',
254
+ icon: 'DiscordLine',
255
+ description: 'When a new message in discord is received',
256
+ items: [
257
+ {
258
+ divider: true,
259
+ label: 'Discord',
260
+ },
261
+ {
262
+ label: 'Author',
263
+ description: 'Author of the message',
264
+ value: '$state:{1.field.author}',
265
+ },
266
+ {
267
+ label: 'Content',
268
+ description: 'Content of the message',
269
+ value: '$state:{1.field.content}',
270
+ },
271
+ ],
272
+ },
273
+ {
274
+ label: 'New event in Google Calendar',
275
+ icon: 'Calendar2Fill',
276
+ description: 'When a new event is created in Google Calendar',
277
+ },
278
+ ],
279
+ },
280
+ },
281
+
282
+ play: async () => {
283
+ await sleep(200);
284
+ await fireEvent.focusIn(document.querySelector('textarea'));
285
+ await expect(document.querySelector('.reqore-popover-content')).toBeTruthy();
286
+ },
287
+ };
@@ -0,0 +1,103 @@
1
+ import { expect } from '@storybook/jest';
2
+ import { StoryObj } from '@storybook/react';
3
+ import { fireEvent, waitFor, within } from '@storybook/testing-library';
4
+ import { IReqoreTextareaProps } from '../../components/Textarea';
5
+ import { sleep } from '../../helpers/utils';
6
+ import { ReqoreTextarea } from '../../index';
7
+ import { StoryMeta } from '../utils';
8
+ import { DisabledArg, MinimalArg, SizeArg, argManager } from '../utils/args';
9
+
10
+ const { createArg } = argManager<IReqoreTextareaProps>();
11
+
12
+ const meta = {
13
+ title: 'Form/TextArea/Tests',
14
+ component: ReqoreTextarea,
15
+ args: {
16
+ scaleWithContent: true,
17
+ fluid: undefined,
18
+ placeholder: 'Placeholder',
19
+ },
20
+ argTypes: {
21
+ ...MinimalArg(),
22
+ ...DisabledArg,
23
+ ...SizeArg,
24
+ ...createArg('scaleWithContent', {
25
+ name: 'Scale with content',
26
+ description: 'Scale with content',
27
+ control: 'boolean',
28
+ defaultValue: true,
29
+ }),
30
+ ...createArg('fluid', {
31
+ name: 'Fluid',
32
+ description: 'Fluid',
33
+ control: 'boolean',
34
+ defaultValue: undefined,
35
+ }),
36
+ ...createArg('placeholder', {
37
+ name: 'Placeholder',
38
+ description: 'Placeholder',
39
+ control: 'text',
40
+ defaultValue: 'Placeholder',
41
+ }),
42
+ },
43
+ } as StoryMeta<typeof ReqoreTextarea>;
44
+
45
+ export default meta;
46
+ type Story = StoryObj<typeof meta>;
47
+
48
+ export const ItemCanBeSelected: Story = {
49
+ args: {
50
+ templates: {
51
+ handler: 'focus',
52
+ useTargetWidth: true,
53
+ noWrapper: true,
54
+ items: [
55
+ {
56
+ label: 'New message in discord',
57
+ icon: 'DiscordLine',
58
+ description: 'When a new message in discord is received',
59
+ items: [
60
+ {
61
+ divider: true,
62
+ label: 'Discord',
63
+ },
64
+ {
65
+ label: 'Author',
66
+ description: 'Author of the message',
67
+ value: '$state:{1.field.author}',
68
+ },
69
+ {
70
+ label: 'Content',
71
+ description: 'Content of the message',
72
+ value: '$state:{1.field.content}',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ label: 'New event in Google Calendar',
78
+ icon: 'Calendar2Fill',
79
+ description: 'When a new event is created in Google Calendar',
80
+ },
81
+ ],
82
+ },
83
+ },
84
+
85
+ play: async ({ canvasElement }) => {
86
+ const canvas = within(canvasElement);
87
+
88
+ await sleep(200);
89
+ await fireEvent.focusIn(document.querySelector('textarea'));
90
+ await sleep(200);
91
+ await expect(document.querySelector('.reqore-popover-content')).toBeTruthy();
92
+ await sleep(200);
93
+ await fireEvent.click(canvas.getAllByText('New message in discord')[0]);
94
+
95
+ await waitFor(() => expect(canvas.getAllByText('Author')[0]).toBeTruthy(), {
96
+ timeout: 5000,
97
+ });
98
+
99
+ await fireEvent.click(canvas.getAllByText('Author')[0]);
100
+
101
+ await expect(canvas.getAllByText('$state:{1.field.author}')[0]).toBeTruthy();
102
+ },
103
+ };