@myunisoft/design-system 1.4.0-rev418-2 → 1.4.0-rev508

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.
package/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # Publications
2
+
3
+ Ce document explique comment publier des versions du design-system sur le GitLab Package Registry.
4
+
5
+ ## Version Dev
6
+
7
+ Les versions dev sont utilisées pour tester des fonctionnalités en cours de développement.
8
+
9
+ ### Format du tag
10
+
11
+ ```
12
+ vX.Y.Z-<prefixe>N.N
13
+ ```
14
+
15
+ Où `<prefixe>` est l'un des suivants :
16
+
17
+ - `rev` - ticket Squad Révision
18
+ - `sc` - ticket Squad Compta
19
+ - `ef` - ticket Squad Liasse
20
+ - `ft` - ticket Squad FT
21
+ - `myun` - ticket MyUnisoft
22
+
23
+ ### Exemple
24
+
25
+ ```bash
26
+ git tag v1.2.3-ft1.0
27
+ git push origin v1.2.3-ft1.0
28
+ ```
29
+
30
+ ### Résultat
31
+
32
+ Le package sera publié avec le tag npm `dev` :
33
+
34
+ ```bash
35
+ # Installe la dernière version dev publiée
36
+ yarn add @myunisoft/design-system@dev
37
+
38
+ # Ou installe une version spécifique
39
+ yarn add @myunisoft/design-system@X.Y.Z-<prefixe>N.N
40
+ ```
41
+
42
+ > **Note** : Le tag `dev` pointe toujours vers la dernière version dev publiée. Les anciennes versions restent accessibles via leur numéro exact.
43
+
44
+ ## Version Release
45
+
46
+ Les versions release sont les versions stables destinées à la production.
47
+
48
+ ### Prérequis
49
+
50
+ - Le tag doit être créé sur un commit présent sur la branche `next`
51
+ - La version dans `package.json` doit correspondre à la version du tag
52
+
53
+ ### Format du tag
54
+
55
+ ```
56
+ vX.Y.Z
57
+ ```
58
+
59
+ ### Exemple
60
+
61
+ ```bash
62
+ # S'assurer d'être sur next
63
+ git checkout next
64
+ git pull origin next
65
+
66
+ # Créer et pousser le tag
67
+ git tag v1.2.3
68
+ git push origin v1.2.3
69
+ ```
70
+
71
+ ### Résultat
72
+
73
+ Le package sera publié avec le tag npm `latest` :
74
+
75
+ ```bash
76
+ # Installe la dernière version stable
77
+ yarn add @myunisoft/design-system@latest
78
+ # ou simplement
79
+ yarn add @myunisoft/design-system
80
+
81
+ # Ou installe une version spécifique
82
+ yarn add @myunisoft/design-system@X.Y.Z
83
+ ```
84
+
85
+ ## Republier une version
86
+
87
+ Si vous devez republier une version (par exemple après un fix rapide), vous devez d'abord supprimer le tag existant puis le recréer.
88
+
89
+ ### Supprimer et recréer un tag
90
+
91
+ ```bash
92
+ # Supprimer le tag distant et local, puis recréer et pousser
93
+ git push origin --delete vX.Y.Z-<prefixe>N.N && git tag -d vX.Y.Z-<prefixe>N.N && git tag vX.Y.Z-<prefixe>N.N && git push origin vX.Y.Z-<prefixe>N.N
94
+ ```
95
+
96
+ ### Exemple
97
+
98
+ ```bash
99
+ git push origin --delete v1.3.2-rev508.2 && git tag -d v1.3.2-rev508.2 && git tag v1.3.2-rev508.2 && git push origin v1.3.2-rev508.2
100
+ ```
101
+
102
+ ### Étapes détaillées
103
+
104
+ 1. `git push origin --delete <tag>` - Supprime le tag sur le dépôt distant
105
+ 2. `git tag -d <tag>` - Supprime le tag localement
106
+ 3. `git tag <tag>` - Recrée le tag sur le commit actuel
107
+ 4. `git push origin <tag>` - Pousse le nouveau tag
108
+
109
+ ## Vérification
110
+
111
+ Les pipelines de publication sont visibles dans GitLab CI/CD > Pipelines.
112
+
113
+ En cas d'erreur sur une release, vérifier que le commit taggé est bien sur la branche `next`.
@@ -93,6 +93,11 @@ declare const _default: {
93
93
  };
94
94
  documentComposer: {
95
95
  createSection: string;
96
+ clickToOpen: string;
97
+ doubleClickToCollapse: string;
98
+ doubleClickToExpand: string;
99
+ collapse: string;
100
+ expand: string;
96
101
  deleteSection: {
97
102
  title: string;
98
103
  content: string;
@@ -111,6 +116,20 @@ declare const _default: {
111
116
  delete: string;
112
117
  createSubsection: string;
113
118
  };
119
+ sectionEditor: {
120
+ save: string;
121
+ cancel: string;
122
+ selectSection: string;
123
+ noContent: string;
124
+ table: string;
125
+ undo: string;
126
+ redo: string;
127
+ menuButton: string;
128
+ };
129
+ noSectionsPlaceholder: {
130
+ startCreating: string;
131
+ createSection: string;
132
+ };
114
133
  };
115
134
  dashboard: {
116
135
  ba: {
@@ -93,6 +93,11 @@ declare const _default: {
93
93
  };
94
94
  documentComposer: {
95
95
  createSection: string;
96
+ clickToOpen: string;
97
+ doubleClickToCollapse: string;
98
+ doubleClickToExpand: string;
99
+ collapse: string;
100
+ expand: string;
96
101
  deleteSection: {
97
102
  title: string;
98
103
  content: string;
@@ -111,6 +116,20 @@ declare const _default: {
111
116
  delete: string;
112
117
  createSubsection: string;
113
118
  };
119
+ sectionEditor: {
120
+ save: string;
121
+ cancel: string;
122
+ selectSection: string;
123
+ noContent: string;
124
+ table: string;
125
+ undo: string;
126
+ redo: string;
127
+ menuButton: string;
128
+ };
129
+ noSectionsPlaceholder: {
130
+ startCreating: string;
131
+ createSection: string;
132
+ };
114
133
  };
115
134
  dashboard: {
116
135
  ba: {
@@ -1,4 +1,4 @@
1
- import type { UnknownFunction } from 'reselect/es/types';
1
+ type UnknownFunction = (...args: unknown[]) => unknown;
2
2
  type AutocompleteEditProps = {
3
3
  data?: object;
4
4
  dataKey?: string;
@@ -0,0 +1,9 @@
1
+ type TableToolbarProps = {
2
+ label: string;
3
+ onUndo: () => void;
4
+ onRedo: () => void;
5
+ canUndo: boolean;
6
+ canRedo: boolean;
7
+ };
8
+ declare const TableToolbar: ({ label, onUndo, onRedo, canUndo, canRedo, }: TableToolbarProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default TableToolbar;
@@ -0,0 +1,3 @@
1
+ import type { TableValue, DataGridState } from './types';
2
+ export declare const fromTableValue: (table: TableValue) => DataGridState;
3
+ export declare const toTableValue: (state: DataGridState, originalTable: TableValue) => TableValue;
@@ -0,0 +1,4 @@
1
+ import type { StructuredTableProps, StructuredTableRef } from './types';
2
+ declare const StructuredTable: import("react").ForwardRefExoticComponent<StructuredTableProps & import("react").RefAttributes<StructuredTableRef>>;
3
+ export default StructuredTable;
4
+ export type { StructuredTableProps, StructuredTableRef, TableValue, TableRow, TableCell, CellFormat } from './types';
@@ -0,0 +1,6 @@
1
+ import type { SxProps, Theme } from '@mui/material';
2
+ export declare const sxBlockContainer: SxProps<Theme>;
3
+ export declare const sxToolbar: SxProps<Theme>;
4
+ export declare const sxToolbarLabel: SxProps<Theme>;
5
+ export declare const sxToolbarActions: SxProps<Theme>;
6
+ export declare const sxDataGrid: SxProps<Theme>;
@@ -0,0 +1,50 @@
1
+ import type { GridColDef, GridRowModel } from '@mui/x-data-grid-pro';
2
+ export declare const CellFormat: {
3
+ readonly TEXT: "text";
4
+ readonly AMOUNT: "amount";
5
+ };
6
+ export type CellFormat = (typeof CellFormat)[keyof typeof CellFormat];
7
+ export type TableCell = {
8
+ value: string;
9
+ editable: boolean;
10
+ format: CellFormat;
11
+ rowSpan?: number;
12
+ colSpan?: number;
13
+ };
14
+ export type TableRow = TableCell[];
15
+ export type TableValue = {
16
+ id: string;
17
+ headers: TableRow[];
18
+ rows: TableRow[];
19
+ footers: TableRow[];
20
+ };
21
+ export type CellMeta = {
22
+ editable: boolean;
23
+ format: CellFormat;
24
+ rowSpan?: number;
25
+ colSpan?: number;
26
+ };
27
+ export type StructuredTableRow = GridRowModel & {
28
+ _meta?: Record<string, CellMeta>;
29
+ };
30
+ export type DataGridState = {
31
+ columns: GridColDef[];
32
+ rows: StructuredTableRow[];
33
+ pinnedRows: {
34
+ top: StructuredTableRow[];
35
+ bottom: StructuredTableRow[];
36
+ };
37
+ };
38
+ export type StructuredTableProps = {
39
+ value: TableValue;
40
+ onChange?: (value: TableValue) => void;
41
+ label?: string;
42
+ readOnly?: boolean;
43
+ };
44
+ export type StructuredTableRef = {
45
+ undo: () => void;
46
+ redo: () => void;
47
+ canUndo: boolean;
48
+ canRedo: boolean;
49
+ getValue: () => TableValue;
50
+ };
@@ -0,0 +1,15 @@
1
+ type UseHistoryReturn<T> = {
2
+ current: T;
3
+ push: (newState: T) => void;
4
+ undo: () => void;
5
+ redo: () => void;
6
+ canUndo: boolean;
7
+ canRedo: boolean;
8
+ /**
9
+ * Reset history. Skips if called right after push() to preserve
10
+ * undo history in controlled component scenarios.
11
+ */
12
+ reset: (newInitialState: T) => void;
13
+ };
14
+ export declare const useHistory: <T>(initialState: T, maxHistory?: number) => UseHistoryReturn<T>;
15
+ export {};
@@ -1,7 +1,12 @@
1
1
  import type { SectionContent } from '../types';
2
2
  type SectionEditorPanelProps = {
3
- content: SectionContent;
4
- onChange: (content: SectionContent) => void;
3
+ content?: SectionContent;
4
+ hasSectionSelected?: boolean;
5
+ title?: string;
6
+ selectedSectionId?: string | null;
7
+ onSave?: (content: SectionContent) => void;
8
+ onDirtyChange?: (isDirty: boolean, currentContent: SectionContent) => void;
9
+ textEditorPlaceholder?: string;
5
10
  };
6
- export declare const SectionEditorPanel: ({ content, onChange }: SectionEditorPanelProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const SectionEditorPanel: ({ content, hasSectionSelected, title, selectedSectionId, onSave, onDirtyChange, textEditorPlaceholder }: SectionEditorPanelProps) => import("react/jsx-runtime").JSX.Element;
7
12
  export {};
@@ -0,0 +1,8 @@
1
+ import type { JSONContent } from '@tiptap/core';
2
+ type TextContentProps = {
3
+ value: JSONContent;
4
+ onChange: (updatedBlock: JSONContent) => void;
5
+ placeholder?: string;
6
+ };
7
+ declare const TextContent: ({ value, onChange, placeholder }: TextContentProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default TextContent;
@@ -29,12 +29,12 @@ export type DocumentComposerCallbacks = {
29
29
  onSectionVisibilityChange?: (sectionId: string, visible: boolean) => void;
30
30
  onSectionCreate?: (parentId: string | null, title: string) => string | Promise<string>;
31
31
  onSectionSelect?: (sectionId: string | null) => void;
32
- /** Used by unsaved changes modal "Save and quit" action */
33
- onSectionContentSave?: () => Promise<void>;
32
+ onSectionContentSave?: (content: SectionContent) => Promise<void>;
34
33
  };
35
34
  export type DocumentComposerCustomProps = {
36
35
  noSectionsPlaceholder?: string | ReactNode;
37
36
  isLoadingSections?: boolean;
37
+ textEditorPlaceholder?: string;
38
38
  /** Defaults to `() => true` */
39
39
  getSectionTitleChangePermission?: (section: DocumentSection) => boolean;
40
40
  /** Defaults to `() => true` */
@@ -67,5 +67,5 @@ export type DocumentComposerCustomProps = {
67
67
  type DocumentComposerProps = {
68
68
  sections?: DocumentSection[];
69
69
  } & DocumentComposerCallbacks & DocumentComposerCustomProps;
70
- declare const DocumentComposer: ({ sections, isLoadingSections, onSectionOrderChange, onSectionTitleChange, onSectionDelete, onSectionVisibilityChange, onSectionCreate, onSectionSelect, onSectionContentSave, noSectionsPlaceholder, getSectionTitleChangePermission, getSectionDeletePermission, getSectionOrderChangePermission, canMoveSectionToNewPosition, getSectionCreatePermission, getSectionVisibilityChangePermission, hiddenSectionTooltip, visibleIconTooltip, hiddenIconTooltip, renderSectionIcon, sectionContent, isLoadingSectionContent, selectedSectionId, renderDeleteConfirmation, renderUnsavedChangesConfirmation }: DocumentComposerProps) => import("react/jsx-runtime").JSX.Element;
70
+ declare const DocumentComposer: ({ sections, isLoadingSections, textEditorPlaceholder, onSectionOrderChange, onSectionTitleChange, onSectionDelete, onSectionVisibilityChange, onSectionCreate, onSectionSelect, onSectionContentSave, noSectionsPlaceholder, getSectionTitleChangePermission, getSectionDeletePermission, getSectionOrderChangePermission, canMoveSectionToNewPosition, getSectionCreatePermission, getSectionVisibilityChangePermission, hiddenSectionTooltip, visibleIconTooltip, hiddenIconTooltip, renderSectionIcon, sectionContent, isLoadingSectionContent, selectedSectionId, renderDeleteConfirmation, renderUnsavedChangesConfirmation }: DocumentComposerProps) => import("react/jsx-runtime").JSX.Element;
71
71
  export default DocumentComposer;
@@ -1,3 +1,5 @@
1
+ import type { JSONContent } from '@tiptap/core';
2
+ export type { JSONContent };
1
3
  export declare const CellFormat: {
2
4
  readonly TEXT: "text";
3
5
  readonly AMOUNT: "amount";
@@ -19,8 +21,14 @@ export type TableContentBlock = {
19
21
  type: 'table';
20
22
  value: TableValue;
21
23
  };
22
- /** Extend this union as new content block types are added */
23
- export type ContentBlock = TableContentBlock;
24
+ export type TextContentBlock = {
25
+ type: 'text';
26
+ value: JSONContent;
27
+ };
28
+ export type ContentBlock = {
29
+ id: string;
30
+ displayOrder: number;
31
+ } & (TableContentBlock | TextContentBlock);
24
32
  export type SectionContent = ContentBlock[];
25
33
  export type DocumentSection = {
26
34
  id: string;
@@ -2,7 +2,7 @@ declare const useStyles: (params: void, muiStyleOverridesParams?: {
2
2
  props: Record<string, unknown>;
3
3
  ownerState?: Record<string, unknown> | undefined;
4
4
  } | undefined) => {
5
- classes: Record<"button" | "title" | "container" | "or" | "icon" | "active" | "scanButton" | "files" | "listItem" | "removeBtn" | "imageLink", string>;
5
+ classes: Record<"button" | "title" | "container" | "or" | "icon" | "active" | "listItem" | "scanButton" | "files" | "removeBtn" | "imageLink", string>;
6
6
  theme: import("@mui/material/styles").Theme;
7
7
  css: import("tss-react/types").Css;
8
8
  cx: import("tss-react/types").Cx;
@@ -1,5 +1,7 @@
1
1
  type Props = {
2
2
  disabled?: boolean;
3
+ externalAnchorEl?: HTMLElement | null;
4
+ onExternalClose?: () => void;
3
5
  };
4
- declare const FontColorButton: ({ disabled }: Props) => import("react/jsx-runtime").JSX.Element | null;
6
+ declare const FontColorButton: ({ disabled, externalAnchorEl, onExternalClose }: Props) => import("react/jsx-runtime").JSX.Element | null;
5
7
  export default FontColorButton;
@@ -1,5 +1,5 @@
1
- import type { Editor } from '@tiptap/react';
2
1
  import { type ReactNode } from 'react';
2
+ import type { Editor } from '@tiptap/react';
3
3
  export type BuiltInButtonId = '-' | 'bold' | 'italic' | 'strikethrough' | 'underline' | 'fontColor' | 'subscript' | 'superscript' | 'alignment' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify' | 'orderedList' | 'bulletList' | 'indent' | 'outdent' | 'blockquote' | 'link' | 'image' | 'table' | 'undo' | 'redo' | 'clearFormatting';
4
4
  export type CustomToolbarButton = {
5
5
  id: string;
@@ -10,13 +10,14 @@ export type CustomToolbarButton = {
10
10
  ariaLabel?: string;
11
11
  tooltipText?: string;
12
12
  };
13
- export type ToolbarButton = BuiltInButtonId | CustomToolbarButton | ReactNode;
13
+ export type ToolbarButtonGroup = Array<BuiltInButtonId | '-'>;
14
+ export type ToolbarButton = BuiltInButtonId | CustomToolbarButton | ReactNode | ToolbarButtonGroup;
14
15
  export type ToolbarProps = {
15
16
  buttons?: ToolbarButton[];
16
17
  extraButtons?: ToolbarButton[];
17
18
  overflowMenu?: boolean;
18
19
  disabled?: boolean;
19
20
  };
20
- export declare const defaultButtonsCompleteSet: BuiltInButtonId[];
21
+ export declare const defaultButtonsCompleteSet: ToolbarButton[];
21
22
  declare const Toolbar: ({ buttons, extraButtons, overflowMenu, disabled }: ToolbarProps) => import("react/jsx-runtime").JSX.Element | null;
22
23
  export default Toolbar;
@@ -1,5 +1,5 @@
1
1
  import { type Editor } from '@tiptap/react';
2
- import { type ToolbarButton, type BuiltInButtonId, type CustomToolbarButton, type ToolbarProps } from './components/Toolbar';
2
+ import { type BuiltInButtonId, type CustomToolbarButton, type ToolbarButton, type ToolbarProps } from './components/Toolbar';
3
3
  export type RichTextEditorRef = {
4
4
  editor: Editor | null;
5
5
  };
@@ -1,4 +1,4 @@
1
- import type { UnknownFunction } from 'reselect/es/types';
1
+ type UnknownFunction = (...args: unknown[]) => unknown;
2
2
  type AutocompleteEditProps = {
3
3
  data?: object;
4
4
  dataKey?: string;
@@ -2,7 +2,7 @@ declare const useStyles: (params: void, muiStyleOverridesParams?: {
2
2
  props: Record<string, unknown>;
3
3
  ownerState?: Record<string, unknown> | undefined;
4
4
  } | undefined) => {
5
- classes: Record<"onError" | "expandIcon" | "align" | "cell" | "pointer" | "focused" | "odd" | "alignLeft" | "alignCenter" | "alignRight" | "thumbnail" | "groupRow" | "cbCell" | "BodyGrid" | "defaultStyle" | "even" | "expandCell" | "lockRow" | "withGrid" | "alignVerticalCenter" | "alignVerticalBottom" | "alignVerticalTop" | "iconButton", string>;
5
+ classes: Record<"onError" | "expandIcon" | "align" | "cell" | "pointer" | "focused" | "alignLeft" | "alignCenter" | "alignRight" | "odd" | "thumbnail" | "groupRow" | "cbCell" | "BodyGrid" | "defaultStyle" | "even" | "expandCell" | "lockRow" | "withGrid" | "alignVerticalCenter" | "alignVerticalBottom" | "alignVerticalTop" | "iconButton", string>;
6
6
  theme: import("@mui/material/styles").Theme;
7
7
  css: import("tss-react/types").Css;
8
8
  cx: import("tss-react/types").Cx;