@salutejs/sdds-cs 0.316.1-canary.1986.15225454757.0 → 0.316.1-canary.1986.15255471728.0

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.
@@ -8,7 +8,7 @@ import { Combobox } from './Combobox';
8
8
 
9
9
  type StorySelectProps = ComponentProps<typeof Combobox> & {
10
10
  enableContentLeft?: boolean;
11
- enableSelectAll?: boolean;
11
+ selectAllLabel?: string;
12
12
  selectAllSticky?: boolean;
13
13
  };
14
14
 
@@ -94,13 +94,6 @@ const meta: Meta<StorySelectProps> = {
94
94
  emptyStateDescription: {
95
95
  control: { type: 'text' },
96
96
  },
97
- enableSelectAll: {
98
- control: 'boolean',
99
- },
100
- selectAllSticky: {
101
- control: 'boolean',
102
- if: { arg: 'enableSelectAll', truthy: true },
103
- },
104
97
  ...disableProps([
105
98
  'hintText',
106
99
  'hintTrigger',
@@ -133,8 +126,6 @@ const meta: Meta<StorySelectProps> = {
133
126
  requiredPlacement: 'right',
134
127
  hasRequiredIndicator: true,
135
128
  emptyStateDescription: '',
136
- enableSelectAll: false,
137
- selectAllSticky: false,
138
129
  },
139
130
  parameters: {
140
131
  controls: {
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
163
154
  'requiredPlacement',
164
155
  'hasRequiredIndicator',
165
156
  'emptyStateDescription',
166
- 'enableSelectAll',
167
- 'selectAllSticky',
168
157
  ],
169
158
  },
170
159
  },
@@ -380,7 +369,7 @@ const items = [
380
369
  {
381
370
  value: 'africa',
382
371
  label: 'Африка',
383
- disabled: true,
372
+ isDisabled: true,
384
373
  },
385
374
  ];
386
375
 
@@ -404,12 +393,12 @@ export const Single: StoryObj<StorySelectProps> = {
404
393
  render: (args) => <SingleStory {...args} />,
405
394
  parameters: {
406
395
  controls: {
407
- exclude: ['isTargetAmount', 'enableSelectAll'],
396
+ exclude: ['isTargetAmount'],
408
397
  },
409
398
  },
410
399
  };
411
400
 
412
- const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelectProps) => {
401
+ const MultipleStory = (args: StorySelectProps) => {
413
402
  const [value, setValue] = useState([]);
414
403
 
415
404
  return (
@@ -421,7 +410,6 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
421
410
  value={value}
422
411
  onChange={setValue}
423
412
  contentLeft={args.enableContentLeft ? <IconDone size="s" /> : undefined}
424
- selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
425
413
  />
426
414
  </div>
427
415
  );
@@ -430,3 +418,187 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
430
418
  export const Multiple: StoryObj<StorySelectProps> = {
431
419
  render: (args) => <MultipleStory {...args} />,
432
420
  };
421
+
422
+ const flatItems = [
423
+ {
424
+ value: 'north_america',
425
+ label: 'Северная Америка',
426
+ },
427
+ {
428
+ value: 'rio_de_janeiro',
429
+ label: 'Рио-де-Жанейро',
430
+ },
431
+ {
432
+ value: 'sao_paulo',
433
+ label: 'Сан-Паулу',
434
+ },
435
+ {
436
+ value: 'buenos_aires',
437
+ label: 'Буэнос-Айрес',
438
+ },
439
+ {
440
+ value: 'cordoba',
441
+ label: 'Кордова',
442
+ },
443
+ {
444
+ value: 'bogota',
445
+ label: 'Богота',
446
+ },
447
+ {
448
+ value: 'medellin',
449
+ label: 'Медельин',
450
+ },
451
+ {
452
+ value: 'paris',
453
+ label: 'Париж',
454
+ },
455
+ {
456
+ value: 'lyon',
457
+ label: 'Лион',
458
+ },
459
+ {
460
+ value: 'berlin',
461
+ label: 'Берлин',
462
+ },
463
+ {
464
+ value: 'munich',
465
+ label: 'Мюнхен',
466
+ },
467
+ {
468
+ value: 'rome',
469
+ label: 'Рим',
470
+ },
471
+ {
472
+ value: 'milan',
473
+ label: 'Милан',
474
+ },
475
+ {
476
+ value: 'madrid',
477
+ label: 'Мадрид',
478
+ },
479
+ {
480
+ value: 'barcelona',
481
+ label: 'Барселона',
482
+ },
483
+ {
484
+ value: 'london',
485
+ label: 'Лондон',
486
+ },
487
+ {
488
+ value: 'manchester',
489
+ label: 'Манчестер',
490
+ },
491
+ {
492
+ value: 'beijing',
493
+ label: 'Пекин',
494
+ },
495
+ {
496
+ value: 'shanghai',
497
+ label: 'Шанхай',
498
+ },
499
+ {
500
+ value: 'tokyo',
501
+ label: 'Токио',
502
+ },
503
+ {
504
+ value: 'osaka',
505
+ label: 'Осака',
506
+ },
507
+ {
508
+ value: 'delhi',
509
+ label: 'Дели',
510
+ },
511
+ {
512
+ value: 'mumbai',
513
+ label: 'Мумбаи',
514
+ },
515
+ {
516
+ value: 'seoul',
517
+ label: 'Сеул',
518
+ },
519
+ {
520
+ value: 'busan',
521
+ label: 'Пусан',
522
+ },
523
+ {
524
+ value: 'bangkok',
525
+ label: 'Бангкок',
526
+ },
527
+ {
528
+ value: 'phuket',
529
+ label: 'Пхукет',
530
+ },
531
+ {
532
+ value: 'africa',
533
+ label: 'Африка',
534
+ },
535
+ ];
536
+
537
+ const SelectAllStory = (args: StorySelectProps) => {
538
+ const [value, setValue] = useState([]);
539
+ const [checked, setChecked] = useState(false);
540
+ const [indeterminate, setIndeterminate] = useState(false);
541
+
542
+ const handleClick = () => {
543
+ if (checked && !indeterminate) {
544
+ setValue([]);
545
+ } else {
546
+ setValue(flatItems.map((item) => item.value));
547
+ }
548
+ };
549
+
550
+ React.useEffect(() => {
551
+ if (value.length === 0) {
552
+ setChecked(false);
553
+ setIndeterminate(false);
554
+ } else if (value.length === flatItems.length) {
555
+ setChecked(true);
556
+ setIndeterminate(false);
557
+ } else {
558
+ setChecked(true);
559
+ setIndeterminate(true);
560
+ }
561
+ }, [value]);
562
+
563
+ return (
564
+ <div style={{ width: '400px' }}>
565
+ <Combobox
566
+ placeholder="Placeholder"
567
+ multiple
568
+ items={flatItems}
569
+ value={value}
570
+ onChange={setValue}
571
+ listOverflow="auto"
572
+ listMaxHeight="300px"
573
+ selectAllOptions={{
574
+ sticky: args?.selectAllSticky || false,
575
+ label: args?.selectAllLabel,
576
+ checked,
577
+ indeterminate,
578
+ onClick: handleClick,
579
+ }}
580
+ />
581
+ </div>
582
+ );
583
+ };
584
+
585
+ export const SelectAll: StoryObj<StorySelectProps> = {
586
+ render: (args) => <SelectAllStory {...args} />,
587
+ argTypes: {
588
+ selectAllSticky: {
589
+ control: 'boolean',
590
+ },
591
+ selectAllLabel: {
592
+ control: 'text',
593
+ },
594
+ },
595
+ args: {
596
+ selectAllSticky: false,
597
+ selectAllLabel: 'Выбрать все',
598
+ },
599
+ parameters: {
600
+ controls: {
601
+ include: ['selectAllSticky', 'selectAllLabel'],
602
+ },
603
+ },
604
+ };
@@ -9,7 +9,7 @@ import { Select } from './Select';
9
9
 
10
10
  type StorySelectProps = ComponentProps<typeof Select> & {
11
11
  enableContentLeft?: boolean;
12
- enableSelectAll?: boolean;
12
+ selectAllLabel?: string;
13
13
  selectAllSticky?: boolean;
14
14
  };
15
15
 
@@ -100,13 +100,6 @@ const meta: Meta<StorySelectProps> = {
100
100
  options: ['default', 'text'],
101
101
  if: { arg: 'target', eq: 'textfield-like' },
102
102
  },
103
- enableSelectAll: {
104
- control: 'boolean',
105
- },
106
- selectAllSticky: {
107
- control: 'boolean',
108
- if: { arg: 'enableSelectAll', truthy: true },
109
- },
110
103
  ...disableProps([
111
104
  'hintText',
112
105
  'hintTrigger',
@@ -138,8 +131,6 @@ const meta: Meta<StorySelectProps> = {
138
131
  requiredPlacement: 'right',
139
132
  hasRequiredIndicator: true,
140
133
  chipType: 'default',
141
- enableSelectAll: false,
142
- selectAllSticky: false,
143
134
  },
144
135
  parameters: {
145
136
  controls: {
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
163
154
  'requiredPlacement',
164
155
  'hasRequiredIndicator',
165
156
  'chipType',
166
- 'enableSelectAll',
167
- 'selectAllSticky',
168
157
  ],
169
158
  },
170
159
  },
@@ -403,7 +392,7 @@ const SingleStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
403
392
  export const Single: StoryObj<StorySelectProps> = {
404
393
  parameters: {
405
394
  controls: {
406
- exclude: ['isTargetAmount', 'chipType', 'enableSelectAll'],
395
+ exclude: ['isTargetAmount', 'chipType'],
407
396
  },
408
397
  },
409
398
  render: (args) => <SingleStory {...args} />,
@@ -412,7 +401,7 @@ export const Single: StoryObj<StorySelectProps> = {
412
401
  },
413
402
  };
414
403
 
415
- const MultiselectStory = ({ enableContentLeft, enableSelectAll, selectAllSticky, ...args }: StorySelectProps) => {
404
+ const MultiselectStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
416
405
  const [value, setValue] = useState<Array<string>>([]);
417
406
 
418
407
  return (
@@ -423,7 +412,6 @@ const MultiselectStory = ({ enableContentLeft, enableSelectAll, selectAllSticky,
423
412
  value={value}
424
413
  onChange={setValue}
425
414
  contentLeft={enableContentLeft ? <IconPlasma size="s" color="inherit" /> : undefined}
426
- selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
427
415
  />
428
416
  </div>
429
417
  );
@@ -466,10 +454,189 @@ const PredefinedStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
466
454
  };
467
455
 
468
456
  export const Predefined: StoryObj<StorySelectProps> = {
457
+ render: (args) => <PredefinedStory {...args} />,
458
+ };
459
+
460
+ const flatItems = [
461
+ {
462
+ value: 'north_america',
463
+ label: 'Северная Америка',
464
+ },
465
+ {
466
+ value: 'rio_de_janeiro',
467
+ label: 'Рио-де-Жанейро',
468
+ },
469
+ {
470
+ value: 'sao_paulo',
471
+ label: 'Сан-Паулу',
472
+ },
473
+ {
474
+ value: 'buenos_aires',
475
+ label: 'Буэнос-Айрес',
476
+ },
477
+ {
478
+ value: 'cordoba',
479
+ label: 'Кордова',
480
+ },
481
+ {
482
+ value: 'bogota',
483
+ label: 'Богота',
484
+ },
485
+ {
486
+ value: 'medellin',
487
+ label: 'Медельин',
488
+ },
489
+ {
490
+ value: 'paris',
491
+ label: 'Париж',
492
+ },
493
+ {
494
+ value: 'lyon',
495
+ label: 'Лион',
496
+ },
497
+ {
498
+ value: 'berlin',
499
+ label: 'Берлин',
500
+ },
501
+ {
502
+ value: 'munich',
503
+ label: 'Мюнхен',
504
+ },
505
+ {
506
+ value: 'rome',
507
+ label: 'Рим',
508
+ },
509
+ {
510
+ value: 'milan',
511
+ label: 'Милан',
512
+ },
513
+ {
514
+ value: 'madrid',
515
+ label: 'Мадрид',
516
+ },
517
+ {
518
+ value: 'barcelona',
519
+ label: 'Барселона',
520
+ },
521
+ {
522
+ value: 'london',
523
+ label: 'Лондон',
524
+ },
525
+ {
526
+ value: 'manchester',
527
+ label: 'Манчестер',
528
+ },
529
+ {
530
+ value: 'beijing',
531
+ label: 'Пекин',
532
+ },
533
+ {
534
+ value: 'shanghai',
535
+ label: 'Шанхай',
536
+ },
537
+ {
538
+ value: 'tokyo',
539
+ label: 'Токио',
540
+ },
541
+ {
542
+ value: 'osaka',
543
+ label: 'Осака',
544
+ },
545
+ {
546
+ value: 'delhi',
547
+ label: 'Дели',
548
+ },
549
+ {
550
+ value: 'mumbai',
551
+ label: 'Мумбаи',
552
+ },
553
+ {
554
+ value: 'seoul',
555
+ label: 'Сеул',
556
+ },
557
+ {
558
+ value: 'busan',
559
+ label: 'Пусан',
560
+ },
561
+ {
562
+ value: 'bangkok',
563
+ label: 'Бангкок',
564
+ },
565
+ {
566
+ value: 'phuket',
567
+ label: 'Пхукет',
568
+ },
569
+ {
570
+ value: 'africa',
571
+ label: 'Африка',
572
+ },
573
+ ];
574
+
575
+ const SelectAllStory = (args: StorySelectProps) => {
576
+ const [value, setValue] = useState([]);
577
+ const [checked, setChecked] = useState(false);
578
+ const [indeterminate, setIndeterminate] = useState(false);
579
+
580
+ const handleClick = () => {
581
+ if (checked && !indeterminate) {
582
+ setValue([]);
583
+ } else {
584
+ setValue(flatItems.map((item) => item.value));
585
+ }
586
+ };
587
+
588
+ React.useEffect(() => {
589
+ if (value.length === 0) {
590
+ setChecked(false);
591
+ setIndeterminate(false);
592
+ } else if (value.length === flatItems.length) {
593
+ setChecked(true);
594
+ setIndeterminate(false);
595
+ } else {
596
+ setChecked(true);
597
+ setIndeterminate(true);
598
+ }
599
+ }, [value]);
600
+
601
+ return (
602
+ <div style={{ width: '400px' }}>
603
+ <Select
604
+ placeholder="Placeholder"
605
+ multiselect
606
+ items={flatItems}
607
+ value={value}
608
+ onChange={setValue}
609
+ listOverflow="auto"
610
+ listMaxHeight="300px"
611
+ selectAllOptions={{
612
+ sticky: args?.selectAllSticky || false,
613
+ label: args?.selectAllLabel,
614
+ checked,
615
+ indeterminate,
616
+ onClick: handleClick,
617
+ }}
618
+ />
619
+ </div>
620
+ );
621
+ };
622
+
623
+ export const SelectAll: StoryObj<StorySelectProps> = {
624
+ render: (args) => <SelectAllStory {...args} />,
625
+ argTypes: {
626
+ selectAllSticky: {
627
+ control: 'boolean',
628
+ },
629
+ selectAllLabel: {
630
+ control: 'text',
631
+ },
632
+ },
633
+ args: {
634
+ selectAllSticky: false,
635
+ selectAllLabel: 'Выбрать все',
636
+ },
469
637
  parameters: {
470
638
  controls: {
471
- exclude: ['enableSelectAll'],
639
+ include: ['selectAllSticky', 'selectAllLabel'],
472
640
  },
473
641
  },
474
- render: (args) => <PredefinedStory {...args} />,
475
642
  };
@@ -8,7 +8,7 @@ import { Combobox } from './Combobox';
8
8
 
9
9
  type StorySelectProps = ComponentProps<typeof Combobox> & {
10
10
  enableContentLeft?: boolean;
11
- enableSelectAll?: boolean;
11
+ selectAllLabel?: string;
12
12
  selectAllSticky?: boolean;
13
13
  };
14
14
 
@@ -94,13 +94,6 @@ const meta: Meta<StorySelectProps> = {
94
94
  emptyStateDescription: {
95
95
  control: { type: 'text' },
96
96
  },
97
- enableSelectAll: {
98
- control: 'boolean',
99
- },
100
- selectAllSticky: {
101
- control: 'boolean',
102
- if: { arg: 'enableSelectAll', truthy: true },
103
- },
104
97
  ...disableProps([
105
98
  'hintText',
106
99
  'hintTrigger',
@@ -133,8 +126,6 @@ const meta: Meta<StorySelectProps> = {
133
126
  requiredPlacement: 'right',
134
127
  hasRequiredIndicator: true,
135
128
  emptyStateDescription: '',
136
- enableSelectAll: false,
137
- selectAllSticky: false,
138
129
  },
139
130
  parameters: {
140
131
  controls: {
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
163
154
  'requiredPlacement',
164
155
  'hasRequiredIndicator',
165
156
  'emptyStateDescription',
166
- 'enableSelectAll',
167
- 'selectAllSticky',
168
157
  ],
169
158
  },
170
159
  },
@@ -380,7 +369,7 @@ const items = [
380
369
  {
381
370
  value: 'africa',
382
371
  label: 'Африка',
383
- disabled: true,
372
+ isDisabled: true,
384
373
  },
385
374
  ];
386
375
 
@@ -404,12 +393,12 @@ export const Single: StoryObj<StorySelectProps> = {
404
393
  render: (args) => <SingleStory {...args} />,
405
394
  parameters: {
406
395
  controls: {
407
- exclude: ['isTargetAmount', 'enableSelectAll'],
396
+ exclude: ['isTargetAmount'],
408
397
  },
409
398
  },
410
399
  };
411
400
 
412
- const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelectProps) => {
401
+ const MultipleStory = (args: StorySelectProps) => {
413
402
  const [value, setValue] = useState([]);
414
403
 
415
404
  return (
@@ -421,7 +410,6 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
421
410
  value={value}
422
411
  onChange={setValue}
423
412
  contentLeft={args.enableContentLeft ? <IconDone size="s" /> : undefined}
424
- selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
425
413
  />
426
414
  </div>
427
415
  );
@@ -430,3 +418,187 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
430
418
  export const Multiple: StoryObj<StorySelectProps> = {
431
419
  render: (args) => <MultipleStory {...args} />,
432
420
  };
421
+
422
+ const flatItems = [
423
+ {
424
+ value: 'north_america',
425
+ label: 'Северная Америка',
426
+ },
427
+ {
428
+ value: 'rio_de_janeiro',
429
+ label: 'Рио-де-Жанейро',
430
+ },
431
+ {
432
+ value: 'sao_paulo',
433
+ label: 'Сан-Паулу',
434
+ },
435
+ {
436
+ value: 'buenos_aires',
437
+ label: 'Буэнос-Айрес',
438
+ },
439
+ {
440
+ value: 'cordoba',
441
+ label: 'Кордова',
442
+ },
443
+ {
444
+ value: 'bogota',
445
+ label: 'Богота',
446
+ },
447
+ {
448
+ value: 'medellin',
449
+ label: 'Медельин',
450
+ },
451
+ {
452
+ value: 'paris',
453
+ label: 'Париж',
454
+ },
455
+ {
456
+ value: 'lyon',
457
+ label: 'Лион',
458
+ },
459
+ {
460
+ value: 'berlin',
461
+ label: 'Берлин',
462
+ },
463
+ {
464
+ value: 'munich',
465
+ label: 'Мюнхен',
466
+ },
467
+ {
468
+ value: 'rome',
469
+ label: 'Рим',
470
+ },
471
+ {
472
+ value: 'milan',
473
+ label: 'Милан',
474
+ },
475
+ {
476
+ value: 'madrid',
477
+ label: 'Мадрид',
478
+ },
479
+ {
480
+ value: 'barcelona',
481
+ label: 'Барселона',
482
+ },
483
+ {
484
+ value: 'london',
485
+ label: 'Лондон',
486
+ },
487
+ {
488
+ value: 'manchester',
489
+ label: 'Манчестер',
490
+ },
491
+ {
492
+ value: 'beijing',
493
+ label: 'Пекин',
494
+ },
495
+ {
496
+ value: 'shanghai',
497
+ label: 'Шанхай',
498
+ },
499
+ {
500
+ value: 'tokyo',
501
+ label: 'Токио',
502
+ },
503
+ {
504
+ value: 'osaka',
505
+ label: 'Осака',
506
+ },
507
+ {
508
+ value: 'delhi',
509
+ label: 'Дели',
510
+ },
511
+ {
512
+ value: 'mumbai',
513
+ label: 'Мумбаи',
514
+ },
515
+ {
516
+ value: 'seoul',
517
+ label: 'Сеул',
518
+ },
519
+ {
520
+ value: 'busan',
521
+ label: 'Пусан',
522
+ },
523
+ {
524
+ value: 'bangkok',
525
+ label: 'Бангкок',
526
+ },
527
+ {
528
+ value: 'phuket',
529
+ label: 'Пхукет',
530
+ },
531
+ {
532
+ value: 'africa',
533
+ label: 'Африка',
534
+ },
535
+ ];
536
+
537
+ const SelectAllStory = (args: StorySelectProps) => {
538
+ const [value, setValue] = useState([]);
539
+ const [checked, setChecked] = useState(false);
540
+ const [indeterminate, setIndeterminate] = useState(false);
541
+
542
+ const handleClick = () => {
543
+ if (checked && !indeterminate) {
544
+ setValue([]);
545
+ } else {
546
+ setValue(flatItems.map((item) => item.value));
547
+ }
548
+ };
549
+
550
+ React.useEffect(() => {
551
+ if (value.length === 0) {
552
+ setChecked(false);
553
+ setIndeterminate(false);
554
+ } else if (value.length === flatItems.length) {
555
+ setChecked(true);
556
+ setIndeterminate(false);
557
+ } else {
558
+ setChecked(true);
559
+ setIndeterminate(true);
560
+ }
561
+ }, [value]);
562
+
563
+ return (
564
+ <div style={{ width: '400px' }}>
565
+ <Combobox
566
+ placeholder="Placeholder"
567
+ multiple
568
+ items={flatItems}
569
+ value={value}
570
+ onChange={setValue}
571
+ listOverflow="auto"
572
+ listMaxHeight="300px"
573
+ selectAllOptions={{
574
+ sticky: args?.selectAllSticky || false,
575
+ label: args?.selectAllLabel,
576
+ checked,
577
+ indeterminate,
578
+ onClick: handleClick,
579
+ }}
580
+ />
581
+ </div>
582
+ );
583
+ };
584
+
585
+ export const SelectAll: StoryObj<StorySelectProps> = {
586
+ render: (args) => <SelectAllStory {...args} />,
587
+ argTypes: {
588
+ selectAllSticky: {
589
+ control: 'boolean',
590
+ },
591
+ selectAllLabel: {
592
+ control: 'text',
593
+ },
594
+ },
595
+ args: {
596
+ selectAllSticky: false,
597
+ selectAllLabel: 'Выбрать все',
598
+ },
599
+ parameters: {
600
+ controls: {
601
+ include: ['selectAllSticky', 'selectAllLabel'],
602
+ },
603
+ },
604
+ };
@@ -9,7 +9,7 @@ import { Select } from './Select';
9
9
 
10
10
  type StorySelectProps = ComponentProps<typeof Select> & {
11
11
  enableContentLeft?: boolean;
12
- enableSelectAll?: boolean;
12
+ selectAllLabel?: string;
13
13
  selectAllSticky?: boolean;
14
14
  };
15
15
 
@@ -100,13 +100,6 @@ const meta: Meta<StorySelectProps> = {
100
100
  options: ['default', 'text'],
101
101
  if: { arg: 'target', eq: 'textfield-like' },
102
102
  },
103
- enableSelectAll: {
104
- control: 'boolean',
105
- },
106
- selectAllSticky: {
107
- control: 'boolean',
108
- if: { arg: 'enableSelectAll', truthy: true },
109
- },
110
103
  ...disableProps([
111
104
  'hintText',
112
105
  'hintTrigger',
@@ -138,8 +131,6 @@ const meta: Meta<StorySelectProps> = {
138
131
  requiredPlacement: 'right',
139
132
  hasRequiredIndicator: true,
140
133
  chipType: 'default',
141
- enableSelectAll: false,
142
- selectAllSticky: false,
143
134
  },
144
135
  parameters: {
145
136
  controls: {
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
163
154
  'requiredPlacement',
164
155
  'hasRequiredIndicator',
165
156
  'chipType',
166
- 'enableSelectAll',
167
- 'selectAllSticky',
168
157
  ],
169
158
  },
170
159
  },
@@ -403,7 +392,7 @@ const SingleStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
403
392
  export const Single: StoryObj<StorySelectProps> = {
404
393
  parameters: {
405
394
  controls: {
406
- exclude: ['isTargetAmount', 'chipType', 'enableSelectAll'],
395
+ exclude: ['isTargetAmount', 'chipType'],
407
396
  },
408
397
  },
409
398
  render: (args) => <SingleStory {...args} />,
@@ -412,7 +401,7 @@ export const Single: StoryObj<StorySelectProps> = {
412
401
  },
413
402
  };
414
403
 
415
- const MultiselectStory = ({ enableContentLeft, enableSelectAll, selectAllSticky, ...args }: StorySelectProps) => {
404
+ const MultiselectStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
416
405
  const [value, setValue] = useState<Array<string>>([]);
417
406
 
418
407
  return (
@@ -423,7 +412,6 @@ const MultiselectStory = ({ enableContentLeft, enableSelectAll, selectAllSticky,
423
412
  value={value}
424
413
  onChange={setValue}
425
414
  contentLeft={enableContentLeft ? <IconPlasma size="s" color="inherit" /> : undefined}
426
- selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
427
415
  />
428
416
  </div>
429
417
  );
@@ -466,10 +454,189 @@ const PredefinedStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
466
454
  };
467
455
 
468
456
  export const Predefined: StoryObj<StorySelectProps> = {
457
+ render: (args) => <PredefinedStory {...args} />,
458
+ };
459
+
460
+ const flatItems = [
461
+ {
462
+ value: 'north_america',
463
+ label: 'Северная Америка',
464
+ },
465
+ {
466
+ value: 'rio_de_janeiro',
467
+ label: 'Рио-де-Жанейро',
468
+ },
469
+ {
470
+ value: 'sao_paulo',
471
+ label: 'Сан-Паулу',
472
+ },
473
+ {
474
+ value: 'buenos_aires',
475
+ label: 'Буэнос-Айрес',
476
+ },
477
+ {
478
+ value: 'cordoba',
479
+ label: 'Кордова',
480
+ },
481
+ {
482
+ value: 'bogota',
483
+ label: 'Богота',
484
+ },
485
+ {
486
+ value: 'medellin',
487
+ label: 'Медельин',
488
+ },
489
+ {
490
+ value: 'paris',
491
+ label: 'Париж',
492
+ },
493
+ {
494
+ value: 'lyon',
495
+ label: 'Лион',
496
+ },
497
+ {
498
+ value: 'berlin',
499
+ label: 'Берлин',
500
+ },
501
+ {
502
+ value: 'munich',
503
+ label: 'Мюнхен',
504
+ },
505
+ {
506
+ value: 'rome',
507
+ label: 'Рим',
508
+ },
509
+ {
510
+ value: 'milan',
511
+ label: 'Милан',
512
+ },
513
+ {
514
+ value: 'madrid',
515
+ label: 'Мадрид',
516
+ },
517
+ {
518
+ value: 'barcelona',
519
+ label: 'Барселона',
520
+ },
521
+ {
522
+ value: 'london',
523
+ label: 'Лондон',
524
+ },
525
+ {
526
+ value: 'manchester',
527
+ label: 'Манчестер',
528
+ },
529
+ {
530
+ value: 'beijing',
531
+ label: 'Пекин',
532
+ },
533
+ {
534
+ value: 'shanghai',
535
+ label: 'Шанхай',
536
+ },
537
+ {
538
+ value: 'tokyo',
539
+ label: 'Токио',
540
+ },
541
+ {
542
+ value: 'osaka',
543
+ label: 'Осака',
544
+ },
545
+ {
546
+ value: 'delhi',
547
+ label: 'Дели',
548
+ },
549
+ {
550
+ value: 'mumbai',
551
+ label: 'Мумбаи',
552
+ },
553
+ {
554
+ value: 'seoul',
555
+ label: 'Сеул',
556
+ },
557
+ {
558
+ value: 'busan',
559
+ label: 'Пусан',
560
+ },
561
+ {
562
+ value: 'bangkok',
563
+ label: 'Бангкок',
564
+ },
565
+ {
566
+ value: 'phuket',
567
+ label: 'Пхукет',
568
+ },
569
+ {
570
+ value: 'africa',
571
+ label: 'Африка',
572
+ },
573
+ ];
574
+
575
+ const SelectAllStory = (args: StorySelectProps) => {
576
+ const [value, setValue] = useState([]);
577
+ const [checked, setChecked] = useState(false);
578
+ const [indeterminate, setIndeterminate] = useState(false);
579
+
580
+ const handleClick = () => {
581
+ if (checked && !indeterminate) {
582
+ setValue([]);
583
+ } else {
584
+ setValue(flatItems.map((item) => item.value));
585
+ }
586
+ };
587
+
588
+ React.useEffect(() => {
589
+ if (value.length === 0) {
590
+ setChecked(false);
591
+ setIndeterminate(false);
592
+ } else if (value.length === flatItems.length) {
593
+ setChecked(true);
594
+ setIndeterminate(false);
595
+ } else {
596
+ setChecked(true);
597
+ setIndeterminate(true);
598
+ }
599
+ }, [value]);
600
+
601
+ return (
602
+ <div style={{ width: '400px' }}>
603
+ <Select
604
+ placeholder="Placeholder"
605
+ multiselect
606
+ items={flatItems}
607
+ value={value}
608
+ onChange={setValue}
609
+ listOverflow="auto"
610
+ listMaxHeight="300px"
611
+ selectAllOptions={{
612
+ sticky: args?.selectAllSticky || false,
613
+ label: args?.selectAllLabel,
614
+ checked,
615
+ indeterminate,
616
+ onClick: handleClick,
617
+ }}
618
+ />
619
+ </div>
620
+ );
621
+ };
622
+
623
+ export const SelectAll: StoryObj<StorySelectProps> = {
624
+ render: (args) => <SelectAllStory {...args} />,
625
+ argTypes: {
626
+ selectAllSticky: {
627
+ control: 'boolean',
628
+ },
629
+ selectAllLabel: {
630
+ control: 'text',
631
+ },
632
+ },
633
+ args: {
634
+ selectAllSticky: false,
635
+ selectAllLabel: 'Выбрать все',
636
+ },
469
637
  parameters: {
470
638
  controls: {
471
- exclude: ['enableSelectAll'],
639
+ include: ['selectAllSticky', 'selectAllLabel'],
472
640
  },
473
641
  },
474
- render: (args) => <PredefinedStory {...args} />,
475
642
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salutejs/sdds-cs",
3
- "version": "0.316.1-canary.1986.15225454757.0",
3
+ "version": "0.316.1-canary.1986.15255471728.0",
4
4
  "description": "Salute Design System / React UI kit for SDDS CS web applications",
5
5
  "author": "Salute Frontend Team <salute.developers@gmail.com>",
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@
30
30
  "directory": "packages/sdds-cs"
31
31
  },
32
32
  "dependencies": {
33
- "@salutejs/plasma-new-hope": "0.324.1-canary.1986.15225454757.0",
33
+ "@salutejs/plasma-new-hope": "0.324.1-canary.1986.15255471728.0",
34
34
  "@salutejs/sdds-themes": "0.37.0-dev.0"
35
35
  },
36
36
  "peerDependencies": {
@@ -123,5 +123,5 @@
123
123
  "Anton Vinogradov"
124
124
  ],
125
125
  "sideEffects": false,
126
- "gitHead": "9e1568be88ed7af0ff17a930f0b4cdef119697de"
126
+ "gitHead": "afd7762b9105000815c1eb7535d1a254bb7d0fe6"
127
127
  }