@true-engineering/true-react-common-ui-kit 4.0.0-alpha0 → 4.0.0-alpha10

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 (156) hide show
  1. package/README.md +11 -567
  2. package/dist/components/Button/Button.styles.d.ts +1 -1
  3. package/dist/components/Checkbox/Checkbox.styles.d.ts +1 -1
  4. package/dist/components/ControlWrapper/ControlWrapper.styles.d.ts +1 -1
  5. package/dist/components/DatePicker/DatePicker.d.ts +2 -2
  6. package/dist/components/DatePicker/helpers.d.ts +3 -0
  7. package/dist/components/DatePicker/types.d.ts +3 -1
  8. package/dist/components/FiltersPane/FiltersPane.d.ts +4 -2
  9. package/dist/components/FiltersPane/FiltersPane.stories.d.ts +3 -3
  10. package/dist/components/FiltersPane/components/Filter/Filter.d.ts +2 -2
  11. package/dist/components/FiltersPane/components/Filter/helpers.d.ts +4 -0
  12. package/dist/components/FiltersPane/components/FilterInterval/FilterInterval.styles.d.ts +1 -1
  13. package/dist/components/FiltersPane/components/FilterSelect/FilterSelect.styles.d.ts +1 -1
  14. package/dist/components/FiltersPane/components/FilterValueView/FilterValueView.d.ts +3 -1
  15. package/dist/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.d.ts +2 -2
  16. package/dist/components/FiltersPane/components/FilterWrapper/FilterWrapper.d.ts +2 -2
  17. package/dist/components/FiltersPane/types.d.ts +15 -5
  18. package/dist/components/Flag/customFlags/customFlags.d.ts +10 -0
  19. package/dist/components/Flag/customFlags/index.d.ts +1 -0
  20. package/dist/components/FlexibleTable/FlexibleTable.d.ts +4 -2
  21. package/dist/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.d.ts +6 -6
  22. package/dist/components/FlexibleTable/constants.d.ts +18 -2
  23. package/dist/components/FlexibleTable/types.d.ts +1 -1
  24. package/dist/components/Input/Input.d.ts +3 -3
  25. package/dist/components/Input/Input.stories.d.ts +2 -2
  26. package/dist/components/Input/Input.styles.d.ts +3 -3
  27. package/dist/components/List/List.d.ts +1 -1
  28. package/dist/components/List/index.d.ts +2 -1
  29. package/dist/components/List/types.d.ts +4 -0
  30. package/dist/components/SearchInput/SearchInput.d.ts +2 -2
  31. package/dist/components/SearchInput/SearchInput.stories.d.ts +3 -12
  32. package/dist/components/SearchInput/SearchInput.styles.d.ts +3 -5
  33. package/dist/components/Select/Select.d.ts +5 -3
  34. package/dist/components/Select/Select.styles.d.ts +8 -8
  35. package/dist/components/Select/index.d.ts +1 -1
  36. package/dist/components/TextArea/TextArea.d.ts +2 -2
  37. package/dist/components/TextArea/TextArea.styles.d.ts +3 -3
  38. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  39. package/dist/components/Tooltip/Tooltip.styles.d.ts +1 -1
  40. package/dist/components/WithMessages/WithMessages.d.ts +10 -0
  41. package/dist/components/{ControlGroup/ControlGroup.stories.d.ts → WithMessages/WithMessages.stories.d.ts} +2 -2
  42. package/dist/components/WithMessages/WithMessages.styles.d.ts +3 -0
  43. package/dist/components/WithMessages/index.d.ts +2 -0
  44. package/dist/components/WithPopup/WithPopup.d.ts +21 -6
  45. package/dist/components/WithPopup/WithPopup.styles.d.ts +1 -1
  46. package/dist/components/WithPopup/helpers.d.ts +2 -0
  47. package/dist/components/WithPopup/types.d.ts +3 -0
  48. package/dist/components/WithTooltip/WithTooltip.styles.d.ts +1 -0
  49. package/dist/components/index.d.ts +1 -1
  50. package/dist/hooks/index.d.ts +1 -0
  51. package/dist/hooks/use-merge.d.ts +1 -0
  52. package/dist/hooks/use-mixed-styles.d.ts +3 -1
  53. package/dist/hooks/use-tweak-styles.d.ts +5 -5
  54. package/dist/theme/Provider.d.ts +6 -3
  55. package/dist/theme/common.d.ts +4 -2
  56. package/dist/theme/create-themed-styles.d.ts +2 -0
  57. package/dist/theme/helpers.d.ts +9 -3
  58. package/dist/theme/index.d.ts +2 -0
  59. package/dist/theme/true-jss/ThemedStylesManager.d.ts +18 -0
  60. package/dist/theme/true-jss/TweakStylesManager.d.ts +34 -0
  61. package/dist/theme/true-jss/index.d.ts +2 -0
  62. package/dist/theme/true-jss/jss-context.d.ts +9 -0
  63. package/dist/theme/types.d.ts +6 -4
  64. package/dist/true-react-common-ui-kit.js +7304 -6380
  65. package/dist/true-react-common-ui-kit.js.map +1 -1
  66. package/dist/true-react-common-ui-kit.umd.cjs +7071 -6148
  67. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  68. package/dist/types.d.ts +2 -1
  69. package/package.json +1 -1
  70. package/src/components/ControlWrapper/ControlWrapper.styles.ts +5 -5
  71. package/src/components/ControlWrapper/ControlWrapper.tsx +1 -1
  72. package/src/components/DatePicker/DatePicker.tsx +9 -4
  73. package/src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.ts +1 -1
  74. package/src/components/DatePicker/helpers.ts +13 -1
  75. package/src/components/DatePicker/types.ts +4 -1
  76. package/src/components/FiltersPane/FiltersPane.stories.tsx +4 -2
  77. package/src/components/FiltersPane/FiltersPane.tsx +14 -9
  78. package/src/components/FiltersPane/components/Filter/Filter.tsx +24 -17
  79. package/src/components/FiltersPane/components/Filter/helpers.ts +18 -0
  80. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.styles.ts +1 -1
  81. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.tsx +6 -1
  82. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.styles.ts +2 -2
  83. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +27 -22
  84. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts +1 -0
  85. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +1 -1
  86. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +7 -5
  87. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.ts +8 -2
  88. package/src/components/FiltersPane/types.ts +23 -5
  89. package/src/components/Flag/Flag.stories.tsx +2 -1
  90. package/src/components/Flag/Flag.styles.ts +4 -0
  91. package/src/components/Flag/Flag.tsx +23 -9
  92. package/src/components/Flag/customFlags/AB.svg +1 -0
  93. package/src/components/Flag/customFlags/OS.svg +1 -0
  94. package/src/components/Flag/customFlags/augment.d.ts +1 -0
  95. package/src/components/Flag/customFlags/customFlags.ts +13 -0
  96. package/src/components/Flag/customFlags/index.ts +1 -0
  97. package/src/components/FlexibleTable/FlexibleTable.tsx +13 -12
  98. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +9 -8
  99. package/src/components/FlexibleTable/constants.ts +6 -3
  100. package/src/components/FlexibleTable/types.ts +1 -5
  101. package/src/components/IncrementInput/IncrementInput.styles.ts +1 -1
  102. package/src/components/Input/Input.styles.ts +5 -2
  103. package/src/components/Input/Input.tsx +9 -8
  104. package/src/components/Input/InputBase.tsx +2 -1
  105. package/src/components/List/List.tsx +5 -2
  106. package/src/components/List/index.ts +2 -1
  107. package/src/components/List/types.ts +5 -0
  108. package/src/components/MultiSelectList/MultiSelectList.styles.ts +1 -1
  109. package/src/components/PhoneInput/PhoneInput.stories.tsx +2 -1
  110. package/src/components/PhoneInput/PhoneInput.styles.ts +2 -2
  111. package/src/components/PhoneInput/PhoneInput.tsx +5 -2
  112. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.ts +1 -1
  113. package/src/components/SearchInput/SearchInput.styles.ts +17 -30
  114. package/src/components/SearchInput/SearchInput.tsx +17 -30
  115. package/src/components/Select/CustomSelect.stories.tsx +2 -2
  116. package/src/components/Select/Select.styles.ts +8 -2
  117. package/src/components/Select/Select.tsx +19 -31
  118. package/src/components/Select/components/SelectList/SelectList.tsx +1 -1
  119. package/src/components/Select/index.ts +1 -1
  120. package/src/components/TextArea/TextArea.styles.ts +7 -3
  121. package/src/components/TextArea/TextArea.tsx +16 -11
  122. package/src/components/Tooltip/Tooltip.styles.ts +2 -0
  123. package/src/components/Tooltip/Tooltip.tsx +1 -1
  124. package/src/components/{ControlGroup/ControlGroup.stories.tsx → WithMessages/WithMessages.stories.tsx} +10 -10
  125. package/src/components/{ControlGroup/ControlGroup.styles.ts → WithMessages/WithMessages.styles.ts} +4 -3
  126. package/src/components/{ControlGroup/ControlGroup.tsx → WithMessages/WithMessages.tsx} +13 -9
  127. package/src/components/WithMessages/index.ts +2 -0
  128. package/src/components/WithPopup/WithPopup.stories.tsx +1 -0
  129. package/src/components/WithPopup/WithPopup.styles.ts +2 -0
  130. package/src/components/WithPopup/WithPopup.tsx +64 -16
  131. package/src/components/WithPopup/helpers.ts +9 -0
  132. package/src/components/WithPopup/types.ts +7 -0
  133. package/src/components/WithTooltip/WithTooltip.styles.ts +6 -0
  134. package/src/components/WithTooltip/WithTooltip.tsx +7 -2
  135. package/src/components/index.ts +1 -1
  136. package/src/constants/phone-info.ts +20 -33
  137. package/src/helpers/phone.ts +19 -15
  138. package/src/hooks/index.ts +1 -0
  139. package/src/hooks/use-merge.ts +8 -0
  140. package/src/hooks/use-mixed-styles.ts +9 -11
  141. package/src/hooks/use-tweak-styles.ts +49 -27
  142. package/src/theme/Provider.tsx +10 -5
  143. package/src/theme/common.ts +5 -2
  144. package/src/theme/create-themed-styles.ts +78 -0
  145. package/src/theme/helpers.ts +39 -39
  146. package/src/theme/index.ts +2 -0
  147. package/src/theme/true-jss/ThemedStylesManager.ts +92 -0
  148. package/src/theme/true-jss/TweakStylesManager.ts +157 -0
  149. package/src/theme/true-jss/index.ts +2 -0
  150. package/src/theme/true-jss/jss-context.tsx +34 -0
  151. package/src/theme/types.ts +6 -4
  152. package/src/types.ts +2 -1
  153. package/dist/components/ControlGroup/ControlGroup.d.ts +0 -10
  154. package/dist/components/ControlGroup/ControlGroup.styles.d.ts +0 -3
  155. package/dist/components/ControlGroup/index.d.ts +0 -2
  156. package/src/components/ControlGroup/index.ts +0 -2
@@ -0,0 +1,157 @@
1
+ import type { StyleSheet, Classes, Rule } from 'jss';
2
+ import {
3
+ isArrayNotEmpty,
4
+ isNotEmpty,
5
+ joinStrings,
6
+ mergeStyles,
7
+ } from '@true-engineering/true-react-platform-helpers';
8
+ import { isTweakStyle } from '../helpers';
9
+
10
+ export type IPartialStyle = object;
11
+
12
+ interface TweakRules<C extends string> {
13
+ classes: Classes<C>;
14
+ refs?: number;
15
+ rules: Map<C, Rule>;
16
+ }
17
+
18
+ interface TweakStylesManagerOptions<C extends string> {
19
+ sheet: StyleSheet<C>;
20
+ classes: Classes<C>;
21
+ tweak?: IPartialStyle[];
22
+ }
23
+
24
+ export class TweakStylesManager<C extends string> {
25
+ #map = new WeakMap<IPartialStyle, TweakStylesManager<C>>();
26
+ #sheet: StyleSheet<C>;
27
+ #classes: Classes<C>;
28
+ #tweak: IPartialStyle[];
29
+
30
+ #tweakRules: TweakRules<C> | undefined;
31
+ constructor({ sheet, classes, tweak = [] }: TweakStylesManagerOptions<C>) {
32
+ this.#sheet = sheet;
33
+ this.#classes = classes;
34
+ this.#tweak = tweak;
35
+ }
36
+
37
+ public getClasses([next, ...rest]: IPartialStyle[]): Classes<C> {
38
+ const nextManager = this.getNextManager(next);
39
+ if (isNotEmpty(nextManager)) {
40
+ return nextManager.getClasses(rest);
41
+ }
42
+ return this.getOrCreate()?.classes ?? this.#classes;
43
+ }
44
+
45
+ public manage([next, ...rest]: IPartialStyle[]): void {
46
+ const nextManager = this.getNextManager(next);
47
+ if (isNotEmpty(nextManager)) {
48
+ return nextManager.manage(rest);
49
+ }
50
+ if (!isNotEmpty(this.#tweakRules)) {
51
+ return;
52
+ }
53
+ if (this.#tweakRules.refs === 0) {
54
+ this.insertRules();
55
+ }
56
+ this.#tweakRules.refs = (this.#tweakRules.refs ?? 0) + 1;
57
+ }
58
+
59
+ public unmanage([next, ...rest]: IPartialStyle[]): void {
60
+ const nextManager = this.getNextManager(next);
61
+ if (isNotEmpty(nextManager)) {
62
+ return nextManager.unmanage(rest);
63
+ }
64
+ if (!isNotEmpty(this.#tweakRules) || this.#tweakRules.refs === 0) {
65
+ return;
66
+ }
67
+ this.#tweakRules.refs = (this.#tweakRules.refs ?? 1) - 1;
68
+ if (this.#tweakRules.refs === 0) {
69
+ this.deleteRules();
70
+ }
71
+ }
72
+
73
+ private getNextManager(next?: IPartialStyle) {
74
+ if (!isNotEmpty(next)) {
75
+ return;
76
+ }
77
+ if (!this.#map.has(next)) {
78
+ const manager = new TweakStylesManager({
79
+ sheet: this.#sheet,
80
+ classes: this.#classes,
81
+ tweak: this.#tweak.concat(next),
82
+ });
83
+ this.#map.set(next, manager);
84
+ }
85
+ return this.#map.get(next);
86
+ }
87
+
88
+ private getOrCreate() {
89
+ if (!isNotEmpty(this.#tweakRules) && isArrayNotEmpty(this.#tweak)) {
90
+ const [first, ...rest] = this.#tweak;
91
+ const styles = isArrayNotEmpty(rest) ? mergeStyles(first, ...rest) : first;
92
+
93
+ const rules = this.addRules(styles);
94
+
95
+ const classes = { ...this.#classes };
96
+ rules.forEach((rule, key) => {
97
+ classes[key] = joinStrings([classes[key], rule.id], ' ');
98
+ });
99
+
100
+ this.#tweakRules = { classes, rules };
101
+ }
102
+ return this.#tweakRules;
103
+ }
104
+
105
+ private addRules(styles: IPartialStyle) {
106
+ return new Map(
107
+ Object.entries(styles)
108
+ .map(([key, style]) => this.addRule(key as C, style))
109
+ .filter(isNotEmpty),
110
+ );
111
+ }
112
+
113
+ private addRule(key: C, style: object) {
114
+ if (isTweakStyle(key)) {
115
+ return;
116
+ }
117
+ const rule = this.#sheet.addRule(key, style, { index: this.getInsertIndex(key) });
118
+ return isNotEmpty(rule) ? ([key, rule] as const) : undefined;
119
+ }
120
+
121
+ private insertRules() {
122
+ this.#tweakRules?.rules.forEach((rule, key) => {
123
+ this.#sheet.rules.register(rule);
124
+ this.#sheet.rules.index.splice(this.getInsertIndex(key), 0, rule);
125
+ this.#sheet.insertRule(rule);
126
+ });
127
+ }
128
+
129
+ private deleteRules() {
130
+ this.#tweakRules?.rules.forEach((rule) => this.#sheet.deleteRule(rule));
131
+ }
132
+
133
+ private getInsertIndex(key: C) {
134
+ return (
135
+ this.#sheet.rules.index.findIndex((rule) => rule.key === key) + 1 ||
136
+ this.#sheet.rules.index.length
137
+ );
138
+ }
139
+ }
140
+
141
+ declare module 'jss' {
142
+ export interface RuleList {
143
+ index: Rule[];
144
+ }
145
+ // eslint-disable-next-line no-shadow
146
+ export interface StyleSheet<RuleName> {
147
+ rules: RuleList;
148
+ // eslint-disable-next-line @typescript-eslint/method-signature-style
149
+ deleteRule(rule: Rule): boolean;
150
+ // eslint-disable-next-line @typescript-eslint/method-signature-style
151
+ addRule(
152
+ name: RuleName,
153
+ style: JssStyle,
154
+ options?: Partial<Rule['options']>,
155
+ ): (Rule & { id: string }) | null;
156
+ }
157
+ }
@@ -0,0 +1,2 @@
1
+ export * from './ThemedStylesManager';
2
+ export * from './jss-context';
@@ -0,0 +1,34 @@
1
+ import { Context, FC, PropsWithChildren, useContext, useMemo } from 'react';
2
+ import { JssContext as JssContextLib } from 'react-jss';
3
+ import { GenerateId } from 'jss';
4
+
5
+ export interface IJssContext {
6
+ generateId?: GenerateId;
7
+ tweakStylesArch?: 'react-jss' | 'true-jss';
8
+ }
9
+
10
+ /** Типизация JssContext оказалась некорректна */
11
+ export const JssContext = JssContextLib as unknown as Context<IJssContext>;
12
+
13
+ export const JssProvider: FC<PropsWithChildren<IJssContext>> = ({
14
+ children,
15
+ tweakStylesArch,
16
+ generateId,
17
+ }) => {
18
+ const context = useContext(JssContext);
19
+
20
+ const value: IJssContext = useMemo(
21
+ () => ({
22
+ ...context,
23
+ tweakStylesArch: tweakStylesArch ?? context.tweakStylesArch,
24
+ generateId: generateId ?? context.generateId,
25
+ }),
26
+ [context, tweakStylesArch, generateId],
27
+ );
28
+
29
+ return (
30
+ <JssContext.Provider key={tweakStylesArch} value={value}>
31
+ {children}
32
+ </JssContext.Provider>
33
+ );
34
+ };
@@ -8,7 +8,7 @@ import type {
8
8
  ICloseButtonStyles,
9
9
  ICommonIcon,
10
10
  IComplexIcon,
11
- IControlGroupStyles,
11
+ IWithMessagesStyles,
12
12
  IControlWrapperStyles,
13
13
  ICssBaselineStyles,
14
14
  IDateInputStyles,
@@ -67,10 +67,12 @@ import type {
67
67
  IWithTooltipStyles,
68
68
  } from '../components';
69
69
 
70
- export type IStyles<C extends string, P> = Styles<C, P, Partial<Styles<C, P>>>;
70
+ export type IStyles<C extends string, P = unknown> = Styles<C, P, Partial<Styles<C, P>>>;
71
71
 
72
+ export type IMaybeArray<T> = T[] | T;
73
+ export type IMixedStyles<T> = IMaybeArray<T | boolean | undefined>;
72
74
  export type IUseStyles<C extends string, P = unknown> = (
73
- data?: P & { theme?: Partial<Styles<C, P>> },
75
+ data?: P & { theme?: IMaybeArray<Partial<Styles<C, P>>> },
74
76
  ) => Classes<C>;
75
77
 
76
78
  export type ITweakStyles<
@@ -138,7 +140,7 @@ export interface IComponentStyles {
138
140
  Toaster: IToasterStyles;
139
141
  WithPopup: IWithPopupStyles;
140
142
  NewMoreMenu: INewMoreMenuStyles;
141
- ControlGroup: IControlGroupStyles;
143
+ WithMessages: IWithMessagesStyles;
142
144
  ControlWrapper: IControlWrapperStyles;
143
145
  WithTooltip: IWithTooltipStyles;
144
146
  }
package/src/types.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  ReactNode,
9
9
  } from 'react';
10
10
  import { Modifier, Placement } from 'react-overlays/usePopper';
11
+ import type { IMaybeArray } from './theme';
11
12
 
12
13
  export interface ITestIdProps {
13
14
  testId?: string;
@@ -22,7 +23,7 @@ export interface IDataAttributesProps extends ITestIdProps {
22
23
  }
23
24
 
24
25
  export interface ITweakStylesProps<TweakStyles> {
25
- tweakStyles?: TweakStyles;
26
+ tweakStyles?: IMaybeArray<TweakStyles>;
26
27
  }
27
28
 
28
29
  export type ICommonProps<TweakStyles> = IDataAttributesProps & ITweakStylesProps<TweakStyles>;
@@ -1,10 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { ICommonProps } from '../../types';
3
- import { IControlGroupStyles } from './ControlGroup.styles';
4
- export interface IControlGroupProps extends ICommonProps<IControlGroupStyles> {
5
- children: ReactNode;
6
- infoMessage?: ReactNode;
7
- errorMessage?: ReactNode;
8
- direction?: 'horizontal' | 'vertical';
9
- }
10
- export declare const ControlGroup: import("react").ForwardRefExoticComponent<IControlGroupProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,3 +0,0 @@
1
- import { ITweakStyles } from '../../theme';
2
- export declare const useStyles: import("../../theme").IUseStyles<"error" | "root" | "horizontal" | "vertical" | "children" | "info" | "message", unknown>;
3
- export type IControlGroupStyles = ITweakStyles<typeof useStyles>;
@@ -1,2 +0,0 @@
1
- export * from './ControlGroup';
2
- export type { IControlGroupStyles } from './ControlGroup.styles';
@@ -1,2 +0,0 @@
1
- export * from './ControlGroup';
2
- export type { IControlGroupStyles } from './ControlGroup.styles';