design-react-kit 5.6.0 → 5.7.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.
Files changed (112) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/Accordion/AccordionBody.cjs +1 -1
  3. package/dist/Accordion/AccordionBody.cjs.map +1 -1
  4. package/dist/Accordion/AccordionBody.js +31 -21
  5. package/dist/Accordion/AccordionBody.js.map +1 -1
  6. package/dist/Accordion/AccordionHeader.cjs +1 -1
  7. package/dist/Accordion/AccordionHeader.cjs.map +1 -1
  8. package/dist/Accordion/AccordionHeader.js +1 -1
  9. package/dist/Accordion/AccordionHeader.js.map +1 -1
  10. package/dist/Autocomplete/Autocomplete.cjs +1 -3
  11. package/dist/Autocomplete/Autocomplete.cjs.map +1 -1
  12. package/dist/Autocomplete/Autocomplete.js +27 -4
  13. package/dist/Autocomplete/Autocomplete.js.map +1 -1
  14. package/dist/Carousel/Carousel.cjs +2 -0
  15. package/dist/Carousel/Carousel.cjs.map +1 -0
  16. package/dist/Carousel/Carousel.js +193 -0
  17. package/dist/Carousel/Carousel.js.map +1 -0
  18. package/dist/Carousel/CarouselSlide.cjs +2 -0
  19. package/dist/Carousel/CarouselSlide.cjs.map +1 -0
  20. package/dist/Carousel/CarouselSlide.js +8 -0
  21. package/dist/Carousel/CarouselSlide.js.map +1 -0
  22. package/dist/Input/Input.cjs +1 -1
  23. package/dist/Input/Input.cjs.map +1 -1
  24. package/dist/Input/Input.js +3 -9
  25. package/dist/Input/Input.js.map +1 -1
  26. package/dist/Input/TextArea.cjs +1 -1
  27. package/dist/Input/TextArea.cjs.map +1 -1
  28. package/dist/Input/utils.cjs +1 -1
  29. package/dist/Input/utils.cjs.map +1 -1
  30. package/dist/Input/utils.js +2 -4
  31. package/dist/Input/utils.js.map +1 -1
  32. package/dist/Rating/Rating.cjs +1 -1
  33. package/dist/Rating/Rating.cjs.map +1 -1
  34. package/dist/Transfer/BacktransferButton.cjs +2 -0
  35. package/dist/Transfer/BacktransferButton.cjs.map +1 -0
  36. package/dist/Transfer/BacktransferButton.js +20 -0
  37. package/dist/Transfer/BacktransferButton.js.map +1 -0
  38. package/dist/Transfer/Item.cjs +2 -0
  39. package/dist/Transfer/Item.cjs.map +1 -0
  40. package/dist/Transfer/Item.js +15 -0
  41. package/dist/Transfer/Item.js.map +1 -0
  42. package/dist/Transfer/ResetButton.cjs +2 -0
  43. package/dist/Transfer/ResetButton.cjs.map +1 -0
  44. package/dist/Transfer/ResetButton.js +16 -0
  45. package/dist/Transfer/ResetButton.js.map +1 -0
  46. package/dist/Transfer/SelectAllCheckbox.cjs +2 -0
  47. package/dist/Transfer/SelectAllCheckbox.cjs.map +1 -0
  48. package/dist/Transfer/SelectAllCheckbox.js +11 -0
  49. package/dist/Transfer/SelectAllCheckbox.js.map +1 -0
  50. package/dist/Transfer/Source.cjs +2 -0
  51. package/dist/Transfer/Source.cjs.map +1 -0
  52. package/dist/Transfer/Source.js +61 -0
  53. package/dist/Transfer/Source.js.map +1 -0
  54. package/dist/Transfer/Target.cjs +2 -0
  55. package/dist/Transfer/Target.cjs.map +1 -0
  56. package/dist/Transfer/Target.js +60 -0
  57. package/dist/Transfer/Target.js.map +1 -0
  58. package/dist/Transfer/Transfer.cjs +2 -0
  59. package/dist/Transfer/Transfer.cjs.map +1 -0
  60. package/dist/Transfer/Transfer.js +21 -0
  61. package/dist/Transfer/Transfer.js.map +1 -0
  62. package/dist/Transfer/TransferButton.cjs +2 -0
  63. package/dist/Transfer/TransferButton.cjs.map +1 -0
  64. package/dist/Transfer/TransferButton.js +20 -0
  65. package/dist/Transfer/TransferButton.js.map +1 -0
  66. package/dist/Transfer/useTransferContext.cjs +2 -0
  67. package/dist/Transfer/useTransferContext.cjs.map +1 -0
  68. package/dist/Transfer/useTransferContext.js +63 -0
  69. package/dist/Transfer/useTransferContext.js.map +1 -0
  70. package/dist/Video/Video.cjs +2 -0
  71. package/dist/Video/Video.cjs.map +1 -0
  72. package/dist/Video/Video.js +99 -0
  73. package/dist/Video/Video.js.map +1 -0
  74. package/dist/index.cjs +1 -3
  75. package/dist/index.cjs.map +1 -1
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/types/Autocomplete/Autocomplete.d.ts +10 -5
  79. package/dist/types/Carousel/Carousel.d.ts +7 -0
  80. package/dist/types/Carousel/CarouselSlide.d.ts +2 -0
  81. package/dist/types/Input/Input.d.ts +2 -4
  82. package/dist/types/Input/utils.d.ts +1 -1
  83. package/dist/types/Transfer/BacktransferButton.d.ts +3 -0
  84. package/dist/types/Transfer/Item.d.ts +12 -0
  85. package/dist/types/Transfer/ResetButton.d.ts +3 -0
  86. package/dist/types/Transfer/SelectAllCheckbox.d.ts +10 -0
  87. package/dist/types/Transfer/Source.d.ts +9 -0
  88. package/dist/types/Transfer/Target.d.ts +9 -0
  89. package/dist/types/Transfer/Transfer.d.ts +40 -0
  90. package/dist/types/Transfer/TransferButton.d.ts +3 -0
  91. package/dist/types/Transfer/useTransferContext.d.ts +49 -0
  92. package/dist/types/Video/Video.d.ts +58 -0
  93. package/dist/types/index.d.ts +6 -0
  94. package/package.json +6 -3
  95. package/src/Accordion/AccordionBody.tsx +32 -22
  96. package/src/Accordion/AccordionHeader.tsx +0 -1
  97. package/src/Autocomplete/Autocomplete.tsx +69 -18
  98. package/src/Carousel/Carousel.tsx +210 -0
  99. package/src/Carousel/CarouselSlide.tsx +14 -0
  100. package/src/Input/Input.tsx +10 -19
  101. package/src/Input/utils.tsx +3 -5
  102. package/src/Transfer/BacktransferButton.tsx +33 -0
  103. package/src/Transfer/Item.tsx +33 -0
  104. package/src/Transfer/ResetButton.tsx +28 -0
  105. package/src/Transfer/SelectAllCheckbox.tsx +30 -0
  106. package/src/Transfer/Source.tsx +89 -0
  107. package/src/Transfer/Target.tsx +87 -0
  108. package/src/Transfer/Transfer.tsx +31 -0
  109. package/src/Transfer/TransferButton.tsx +33 -0
  110. package/src/Transfer/useTransferContext.tsx +110 -0
  111. package/src/Video/Video.tsx +205 -0
  112. package/src/index.ts +6 -0
@@ -0,0 +1,110 @@
1
+ import React, { createContext, useContext, useMemo, useState } from 'react';
2
+
3
+ interface TransferContextType {
4
+ sourceItems: { id: string; content: React.ReactNode }[];
5
+ targetItems: { id: string; content: React.ReactNode }[];
6
+ sourceCandidates: string[];
7
+ targetCandidates: string[];
8
+ setSourceItems: ({
9
+ items,
10
+ setOriginals
11
+ }: {
12
+ items: { id: string; content: React.ReactNode }[];
13
+ setOriginals?: boolean;
14
+ }) => void;
15
+ setTargetItems: ({
16
+ items,
17
+ setOriginals
18
+ }: {
19
+ items: { id: string; content: React.ReactNode }[];
20
+ setOriginals?: boolean;
21
+ }) => void;
22
+ setSourceCandidates: (items: string[]) => void;
23
+ setTargetCandidates: (items: string[]) => void;
24
+ isChanged: boolean;
25
+ reset: () => void;
26
+ }
27
+
28
+ export const TransferContext = createContext<TransferContextType>({
29
+ sourceItems: [],
30
+ targetItems: [],
31
+ sourceCandidates: [],
32
+ targetCandidates: [],
33
+ setSourceItems: () => {},
34
+ setTargetItems: () => {},
35
+ setSourceCandidates: () => {},
36
+ setTargetCandidates: () => {},
37
+ isChanged: false,
38
+ reset: () => {}
39
+ });
40
+
41
+ export const useTransferContext = () => useContext(TransferContext);
42
+
43
+ export const TransferContextProvider = ({ children }: { children: React.ReactNode }) => {
44
+ const [sourceItems, setSourceItems] = useState<{ id: string; content: React.ReactNode }[]>([]);
45
+ const [targetItems, setTargetItems] = useState<{ id: string; content: React.ReactNode }[]>([]);
46
+ const [sourceCandidates, setSourceCandidates] = useState<string[]>([]);
47
+ const [targetCandidates, setTargetCandidates] = useState<string[]>([]);
48
+ const [originalSourceItems, setOriginalSourceItems] = useState<{ id: string; content: React.ReactNode }[]>([]);
49
+ const [originalTargetItems, setOriginalTargetItems] = useState<{ id: string; content: React.ReactNode }[]>([]);
50
+
51
+ const value = useMemo(
52
+ () => ({
53
+ sourceCandidates,
54
+ targetCandidates,
55
+ sourceItems,
56
+ targetItems,
57
+ setSourceItems: ({
58
+ items,
59
+ setOriginals
60
+ }: {
61
+ items: { id: string; content: React.ReactNode }[];
62
+ setOriginals?: boolean;
63
+ }) => {
64
+ setSourceItems(items);
65
+ if (setOriginals) {
66
+ setOriginalSourceItems(items);
67
+ }
68
+ },
69
+ setTargetItems: ({
70
+ items,
71
+ setOriginals
72
+ }: {
73
+ items: { id: string; content: React.ReactNode }[];
74
+ setOriginals?: boolean;
75
+ }) => {
76
+ setTargetItems(items);
77
+ if (setOriginals) {
78
+ setOriginalTargetItems(items);
79
+ }
80
+ },
81
+ setSourceCandidates,
82
+ setTargetCandidates,
83
+ reset: () => {
84
+ setSourceItems(originalSourceItems);
85
+ setTargetItems(originalTargetItems);
86
+ setSourceCandidates([]);
87
+ setTargetCandidates([]);
88
+ },
89
+ isChanged:
90
+ JSON.stringify(sourceItems) !== JSON.stringify(originalSourceItems) ||
91
+ JSON.stringify(targetItems) !== JSON.stringify(originalTargetItems)
92
+ }),
93
+ [sourceItems, targetItems, sourceCandidates, targetCandidates, originalSourceItems, originalTargetItems]
94
+ );
95
+
96
+ return <TransferContext.Provider value={value}>{children}</TransferContext.Provider>;
97
+ };
98
+
99
+ export const useTransfer = () => {
100
+ const { sourceItems, targetItems, sourceCandidates, targetCandidates } = useTransferContext();
101
+
102
+ return {
103
+ source: sourceItems.map((item) => {
104
+ return { ...item, checked: sourceCandidates.includes(item.id) };
105
+ }),
106
+ target: targetItems.map((item) => {
107
+ return { ...item, checked: targetCandidates.includes(item.id) };
108
+ })
109
+ };
110
+ };
@@ -0,0 +1,205 @@
1
+ import React, { FC, useEffect, useRef } from 'react';
2
+
3
+ import { VideoPlayer } from 'bootstrap-italia';
4
+ import { Input } from '../Input/Input';
5
+ import { Accordion } from '../Accordion/Accordion';
6
+ import { AccordionItem } from '../Accordion/AccordionItem';
7
+ import { AccordionHeader } from '../Accordion/AccordionHeader';
8
+ import { AccordionBody } from '../Accordion/AccordionBody';
9
+ import { Dimmer } from '../Dimmer/Dimmer';
10
+ import { DimmerButtons } from '../Dimmer/DimmerButtons';
11
+ import { Button } from '../Button/Button';
12
+ import { FormGroup, Label } from 'reactstrap';
13
+ import { Icon } from '../Icon/Icon';
14
+
15
+ export interface VideoSource {
16
+ /** Sorgente del video */
17
+ src: string;
18
+ /** Tipo della sorgente video */
19
+ type: string;
20
+ }
21
+ export interface VideoTrackSource {
22
+ /** Tipologia di traccia audio */
23
+ kind: string;
24
+ /** Sorgente della traccia audio */
25
+ src: string;
26
+ /** Lingua della traccia audio */
27
+ srcLang: string;
28
+ /** Label della traccia audio */
29
+ label: string;
30
+ /** Setta la traccia audio come default */
31
+ isDefault?: boolean;
32
+ }
33
+
34
+ export interface VideoYouTube {
35
+ /** Url del video YouTube */
36
+ url: string;
37
+ /** Attiva o meno il disclaimer */
38
+ hasDisclaimer?: boolean;
39
+ /** Testo del disclaimer */
40
+ disclaimerText?: string;
41
+ /** Chiave del disclaimer come preferenza */
42
+ disclaimerKey?: string;
43
+ }
44
+ export interface VideoProps {
45
+ /** Id del componente Video */
46
+ id: string;
47
+ /** Sorgenti del video */
48
+ sources?: Array<VideoSource>;
49
+ /** Testo della trascrizione */
50
+ transcription?: string;
51
+ /** Label dell'accordion della trascrizione */
52
+ transcriptionLabel?: string;
53
+ /** Array delle tracce */
54
+ tracks?: Array<VideoTrackSource>;
55
+ /** Url del poster */
56
+ poster?: string;
57
+ /** Attiva o meno i controlli */
58
+ controls?: boolean;
59
+ /** Attiva o meno l'autoplay */
60
+ autoPlay?: boolean;
61
+ /** Attiva o meno il loop del video */
62
+ loop?: boolean;
63
+ /** Modalità visualizzazione fluida */
64
+ fluid?: boolean;
65
+ /** Video YouTube */
66
+ youtube?: VideoYouTube;
67
+ /** Label del pulsante di accettazione */
68
+ acceptLabel?: string;
69
+ /** Label della checkbox per ricordare la scelta di accettazione */
70
+ rememberLabel?: string;
71
+ }
72
+
73
+ export const Video: FC<VideoProps> = (props) => {
74
+ const [showTranscript, setShowTranscript] = React.useState(false);
75
+ const [showDisclaimer, setShowDisclaimer] = React.useState(false);
76
+ const [instance, setInstance] = React.useState<VideoPlayer>();
77
+ const [rememberFlag, setRememberFlag] = React.useState(false);
78
+ const [disclaimerText, setDisclaimerText] = React.useState(
79
+ `Accetta i cookie di YouTube per vedere il video. Puoi gestire le preferenze nella cookie policy.`
80
+ );
81
+ const ref = useRef<HTMLVideoElement>(null);
82
+
83
+ useEffect(() => {
84
+ const el = ref.current;
85
+ if (el && VideoPlayer && !instance) {
86
+ setInstance(new VideoPlayer(el))
87
+ }
88
+ if (props.youtube?.url) {
89
+ if (props.youtube.hasDisclaimer) {
90
+ const serviceName = props.youtube.disclaimerKey || 'youtube';
91
+ const rememberFlag = localStorage.getItem(serviceName);
92
+ if (props.youtube.disclaimerText) {
93
+ setDisclaimerText(props.youtube.disclaimerText);
94
+ }
95
+ setRememberFlag(rememberFlag == 'true');
96
+ if (rememberFlag == 'true') {
97
+ setShowDisclaimer(false);
98
+ loadYouTubeVideo(props.youtube.url);
99
+ } else {
100
+ setShowDisclaimer(true);
101
+ }
102
+ }
103
+ }
104
+
105
+ if (props.autoPlay) {
106
+ setTimeout(() => {
107
+ instance?.player?.play();
108
+ }, 1000);
109
+ }
110
+
111
+ return () => {
112
+ if (instance) {
113
+ instance.dispose();
114
+ }
115
+ };
116
+ }, [instance]);
117
+
118
+ const loadYouTubeVideo = (url: string) => {
119
+ if (instance) {
120
+ instance.setYouTubeVideo(url);
121
+ }
122
+ }
123
+
124
+ const { controls = true, autoPlay = false, loop = false, fluid = true, poster = undefined } = props;
125
+ const videoProps = { controls, autoPlay, loop, fluid, poster };
126
+
127
+ return (
128
+ <>
129
+ <div className='row dimmable'>
130
+ <video {...videoProps} ref={ref} preload='auto' className='video-js' data-bs-video={true}>
131
+ {props.sources?.map((source) => <source key={source.src} src={source.src} type={source.type} />)}
132
+ {props.tracks?.map((track) => {
133
+ const { src, kind, label, srcLang, isDefault } = track;
134
+ return (
135
+ <track
136
+ key={src}
137
+ kind={kind}
138
+ src={src}
139
+ srcLang={srcLang || ''}
140
+ label={label}
141
+ default={isDefault || false}
142
+ />
143
+ );
144
+ })}
145
+ </video>
146
+ {props.transcription && (
147
+ <Accordion className='vjs-transcription'>
148
+ <AccordionItem>
149
+ <AccordionHeader active={showTranscript} onToggle={() => setShowTranscript((p) => !p)}>
150
+ {props.transcriptionLabel || 'Trascrizione'}
151
+ </AccordionHeader>
152
+ <AccordionBody active={showTranscript}>{props.transcription}</AccordionBody>
153
+ </AccordionItem>
154
+ </Accordion>
155
+ )}
156
+ <Dimmer
157
+ show={showDisclaimer}
158
+ className='acceptoverlay-inner'
159
+ wrapperClassName='acceptoverlay acceptoverlay-primary '
160
+ >
161
+ <div className='acceptoverlay-icon'>
162
+ <Icon icon='it-video' size='xl' className=''></Icon>
163
+ </div>
164
+ <p dangerouslySetInnerHTML={{ __html: disclaimerText }}></p>
165
+ <DimmerButtons className='bg-primary'>
166
+ <Button
167
+ onClick={() => {
168
+ if (props.youtube?.url) {
169
+ if (props.youtube.hasDisclaimer) {
170
+ const serviceName = props.youtube.disclaimerKey || 'youtube';
171
+ if (rememberFlag) {
172
+ // set cookie
173
+ localStorage.setItem(serviceName, 'true');
174
+ } else {
175
+ // reset cookie
176
+ localStorage.removeItem(serviceName);
177
+ }
178
+ loadYouTubeVideo(props.youtube.url);
179
+ }
180
+ setShowDisclaimer(false);
181
+ }
182
+ }}
183
+ color='primary'
184
+ >
185
+ {props.acceptLabel || 'Accetta'}
186
+ </Button>
187
+ <div className='d-flex align-items-center ml-2'>
188
+ <FormGroup check inline>
189
+ <Input
190
+ id={`inline-checkbox_${props.id}`}
191
+ type='checkbox'
192
+ checked={rememberFlag}
193
+ onChange={() => setRememberFlag((p) => !p)}
194
+ />
195
+ <Label check for={`inline-checkbox_${props.id}`} defaultChecked={false} className='text-white'>
196
+ {props.rememberLabel || 'Ricorda per tutti i video'}
197
+ </Label>
198
+ </FormGroup>
199
+ </div>
200
+ </DimmerButtons>
201
+ </Dimmer>
202
+ </div>
203
+ </>
204
+ );
205
+ };
package/src/index.ts CHANGED
@@ -79,6 +79,8 @@ export { CardTag } from './Card/CardTag';
79
79
  export { CardTagsHeader } from './Card/CardTagsHeader';
80
80
  export { CardText } from './Card/CardText';
81
81
  export { CardTitle } from './Card/CardTitle';
82
+ export { Carousel } from './Carousel/Carousel';
83
+ export { CarouselSlide } from './Carousel/CarouselSlide';
82
84
  export { Chip } from './Chips/Chip';
83
85
  export { ChipLabel } from './Chips/ChipLabel';
84
86
  export { Collapse } from './Collapse/Collapse';
@@ -146,6 +148,8 @@ export { Toggle } from './Toggle/Toggle';
146
148
  export { Toolbar } from './Toolbar/Toolbar';
147
149
  export { ToolbarDividerItem } from './Toolbar/ToolbarDividerItem';
148
150
  export { ToolbarItem } from './Toolbar/ToolbarItem';
151
+ export { Transfer } from './Transfer/Transfer';
152
+ export { Video } from './Video/Video'
149
153
 
150
154
  // Types
151
155
  export type { AccordionProps } from './Accordion/Accordion';
@@ -177,6 +181,7 @@ export type { CardTagProps } from './Card/CardTag';
177
181
  export type { CardTagsHeaderProps } from './Card/CardTagsHeader';
178
182
  export type { CardTextProps } from './Card/CardText';
179
183
  export type { CardTitleProps } from './Card/CardTitle';
184
+ export type { CarouselProps } from './Carousel/Carousel';
180
185
  export type { ChipProps } from './Chips/Chip';
181
186
  export type { ChipLabelProps } from './Chips/ChipLabel';
182
187
  export type { DimmerProps } from './Dimmer/Dimmer';
@@ -254,6 +259,7 @@ export type { TimelineProps } from './Timeline/TimelineWrapper';
254
259
  export type { ToggleProps } from './Toggle/Toggle';
255
260
  export type { ToolbarProps } from './Toolbar/Toolbar';
256
261
  export type { ToolbarItemBadge, ToolbarItemProps } from './Toolbar/ToolbarItem';
262
+ export type { VideoProps, VideoYouTube, VideoSource, VideoTrackSource } from "./Video/Video"
257
263
 
258
264
  export type {
259
265
  BreadcrumbItemProps,