namirasoft-site-react 1.3.82 → 1.3.83

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 (54) hide show
  1. package/dist/App.js +2 -30
  2. package/dist/App.js.map +1 -1
  3. package/dist/components/NSActionMenu.d.ts +14 -0
  4. package/dist/components/NSActionMenu.js +16 -0
  5. package/dist/components/NSActionMenu.js.map +1 -0
  6. package/dist/components/NSActionMenu.module.css +73 -0
  7. package/dist/components/NSButton.js +1 -1
  8. package/dist/components/NSButton.js.map +1 -1
  9. package/dist/components/NSButton.module.css +12 -6
  10. package/dist/components/NSButtonBlue.module.css +1 -0
  11. package/dist/components/NSButtonGreen.module.css +1 -0
  12. package/dist/components/NSButtonRed.module.css +1 -0
  13. package/dist/components/NSCard.module.css +1 -1
  14. package/dist/components/NSInput.module.css +26 -6
  15. package/dist/components/NSInputSearch.js +1 -2
  16. package/dist/components/NSInputSearch.js.map +1 -1
  17. package/dist/components/NSLayoutAction.d.ts +11 -0
  18. package/dist/components/NSLayoutAction.js +15 -0
  19. package/dist/components/NSLayoutAction.js.map +1 -0
  20. package/dist/components/NSLayoutAction.module.css +45 -0
  21. package/dist/components/NSLink.js +1 -1
  22. package/dist/components/NSLink.js.map +1 -1
  23. package/dist/components/NSModal.d.ts +4 -0
  24. package/dist/components/NSModal.js +6 -0
  25. package/dist/components/NSModal.js.map +1 -0
  26. package/dist/components/NSModal.module.css +0 -0
  27. package/dist/components/NSSpace.js +1 -1
  28. package/dist/components/NSSpace.js.map +1 -1
  29. package/dist/components/NSTable.d.ts +1 -0
  30. package/dist/components/NSTable.js +1 -1
  31. package/dist/components/NSTable.js.map +1 -1
  32. package/dist/components/NSTable.module.css +8 -2
  33. package/package.json +1 -1
  34. package/public/assets/images/export-vector.png +0 -0
  35. package/public/assets/images/refresh-vector.png +0 -0
  36. package/src/App.tsx +101 -41
  37. package/src/components/NSActionMenu.module.css +73 -0
  38. package/src/components/NSActionMenu.tsx +67 -0
  39. package/src/components/NSButton.module.css +12 -6
  40. package/src/components/NSButton.tsx +2 -2
  41. package/src/components/NSButtonBlue.module.css +1 -0
  42. package/src/components/NSButtonGreen.module.css +1 -0
  43. package/src/components/NSButtonRed.module.css +1 -0
  44. package/src/components/NSCard.module.css +1 -1
  45. package/src/components/NSInput.module.css +26 -6
  46. package/src/components/NSInputSearch.tsx +73 -63
  47. package/src/components/NSLayoutAction.module.css +45 -0
  48. package/src/components/NSLayoutAction.tsx +62 -0
  49. package/src/components/NSLink.tsx +2 -2
  50. package/src/components/NSModal.module.css +0 -0
  51. package/src/components/NSModal.tsx +21 -0
  52. package/src/components/NSSpace.tsx +16 -16
  53. package/src/components/NSTable.module.css +8 -2
  54. package/src/components/NSTable.tsx +4 -3
package/src/App.tsx CHANGED
@@ -1,47 +1,107 @@
1
1
  import './App.css';
2
2
  import 'bootstrap/dist/css/bootstrap.min.css';
3
- import { NSFooter, NSHeader, NSTable } from './main';
3
+ import
4
+ {
5
+ NSFooter, NSHeader
6
+ // , NSNotificationColor, NSTable, NotificationType
7
+ } from './main';
4
8
 
9
+ // const actions = [
10
+ // {
11
+ // group: "test-1",
12
+ // items: [
13
+ // {
14
+ // id: "1",
15
+ // menu_item: "test-1-1",
16
+ // handler()
17
+ // {
18
+ // console.log("test-1-1-1")
19
+ // },
20
+ // isActive()
21
+ // {
22
+ // return false
23
+ // }
24
+ // },
25
+ // {
26
+ // id: "5",
27
+ // menu_item: "test-3-3",
28
+ // handler()
29
+ // {
30
+ // console.log("test-3-3-3")
31
+ // },
32
+ // isActive()
33
+ // {
34
+ // return true
35
+ // }
36
+ // }
37
+ // ]
38
+ // },
39
+ // {
40
+ // group: "test-2",
41
+ // items: [
42
+ // {
43
+ // id: "9",
44
+ // menu_item: "test-2-2",
45
+ // handler()
46
+ // {
47
+ // console.log("test-2-2-2")
48
+ // },
49
+ // isActive()
50
+ // {
51
+ // return true
52
+ // }
53
+ // }
54
+ // ]
55
+ // }
56
+ // ]
57
+ // const notifications = [
58
+ // {
59
+ // type: NotificationType.Error,
60
+ // color: NSNotificationColor.RED,
61
+ // text: "hello there its test ",
62
+ // onClose: () => console.log("test-closed")
63
+ // }
64
+ // ]
5
65
  export function App()
6
66
  {
7
- let columns = {
8
- "id": "ID",
9
- "project": "Project",
10
- "level": "Level",
11
- "message": "Message",
12
- "cent": "Cent",
13
- "status": "Status",
14
- }
15
- let rows = [{
16
- id: 1,
17
- project: "Namirasoft Account",
18
- level: "Debug",
19
- message: "Lorem ipsum dolor sit amet, consetetur ",
20
- cent: "26",
21
- status: "pending"
22
- },
23
- {
24
- id: 2,
25
- project: "Namirasoft Account",
26
- level: "Debug",
27
- message: "Lorem ipsum dolor sit amet, consetetur ",
28
- cent: "24",
29
- status: "Done"
30
- }
31
- ]
32
- interface Row
33
- {
34
- id: number,
35
- project: string,
36
- level: string,
37
- message: string,
38
- cent: string,
39
- status: string
40
- }
41
- function getCell(row: Row, column: string): any
42
- {
43
- return (row as any)[column];
44
- }
67
+ // let columns = {
68
+ // "id": "ID",
69
+ // "project": "Project",
70
+ // "level": "Level",
71
+ // "message": "Message",
72
+ // "cent": "Cent",
73
+ // "status": "Status",
74
+ // }
75
+ // let rows = [{
76
+ // id: 1,
77
+ // project: "Namirasoft Account",
78
+ // level: "Debug",
79
+ // message: "Lorem ipsum dolor sit amet, consetetur ",
80
+ // cent: "26",
81
+ // status: "pending"
82
+ // },
83
+ // {
84
+ // id: 2,
85
+ // project: "Namirasoft Account",
86
+ // level: "Debug",
87
+ // message: "Lorem ipsum dolor sit amet, consetetur ",
88
+ // cent: "24",
89
+ // status: "Done"
90
+ // }
91
+ // ]
92
+ // interface Row
93
+ // {
94
+ // id: number,
95
+ // project: string,
96
+ // level: string,
97
+ // message: string,
98
+ // cent: string,
99
+ // status: string
100
+ // }
101
+ // function getCell(row: Row, column: string): any
102
+ // {
103
+ // return (row as any)[column];
104
+ // }
45
105
  return (
46
106
  <>
47
107
  <NSHeader
@@ -52,12 +112,12 @@ export function App()
52
112
  style={{ backgroundColor: "transparent !important" }}
53
113
  />
54
114
  <div>
55
- <NSTable
115
+ {/* <NSTable
56
116
  columns={columns}
57
117
  rows={rows}
58
118
  getCell={getCell}
59
119
  getColumnAttributes={() => { return {} }}
60
- getRowKey={row => row.id.toString()} />
120
+ getRowKey={row => row.id.toString()} /> */}
61
121
 
62
122
  </div>
63
123
  <NSFooter name='Footer' scope='Namira Software Corporation' logo='https://static.namirasoft.com/image/namirasoft/site/logo/base.png' />
@@ -0,0 +1,73 @@
1
+ .ns_action_bar {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 272px;
5
+ color: #000;
6
+ position: relative;
7
+ max-width: 100%;
8
+ }
9
+
10
+ .ns_action_bar>button {
11
+ border-radius: 8px;
12
+ padding: 10px 12px;
13
+ font-size: 16px;
14
+ font-weight: 400;
15
+ border: 1px solid rgba(47, 0, 236, 0.6) !important;
16
+ max-width: 100%;
17
+ height: max-content !important;
18
+ background: #fff;
19
+ cursor: pointer;
20
+ text-align: start;
21
+ color: #141B5C;
22
+ cursor: pointer;
23
+ }
24
+
25
+ .ns_action_menu_icon {
26
+ position: absolute;
27
+ right: 20px;
28
+ top: 12px;
29
+ z-index: 1;
30
+ }
31
+
32
+ .ns_action_item_holder {
33
+ list-style-type: none;
34
+ padding: 16px 0;
35
+ margin: 0;
36
+ background: #fff;
37
+ border-radius: 8px;
38
+ position: absolute;
39
+ top: 64px;
40
+ left: 0;
41
+ width: 100%;
42
+ }
43
+
44
+ .ns_action_item {
45
+ height: 40px;
46
+ display: flex;
47
+ align-items: center;
48
+ font-size: 16px;
49
+ color: #141B5C;
50
+ padding: 0 16px;
51
+ cursor: pointer;
52
+ position: relative;
53
+ z-index: 1;
54
+ }
55
+
56
+ .ns_action_item:hover {
57
+ background-color: #141B5C66;
58
+ }
59
+
60
+ .ns_active_item {}
61
+
62
+ .ns_deActive_item {
63
+ color: #D1D1D1;
64
+ cursor: not-allowed;
65
+ }
66
+
67
+ .ns_show {
68
+ display: block;
69
+ }
70
+
71
+ .ns_hide {
72
+ display: none;
73
+ }
@@ -0,0 +1,67 @@
1
+ import { useState } from 'react';
2
+ import { IBaseComponentProps, NSButtonBlue } from '../main';
3
+ import Styles from './NSActionMenu.module.css';
4
+
5
+ export interface INSActionMenuProps extends IBaseComponentProps
6
+ {
7
+ group: string;
8
+ items: {
9
+ id: string
10
+ menu_item: string;
11
+ handler: () => void;
12
+ isActive: () => boolean;
13
+ }[];
14
+ }
15
+
16
+ export interface INSActionMenuState
17
+ {
18
+ isShow: boolean;
19
+ }
20
+
21
+ export function NSActionMenu(props: INSActionMenuProps)
22
+ {
23
+ const [state, setState] = useState<INSActionMenuState>({
24
+ isShow: false
25
+ })
26
+ return (
27
+ <>
28
+ {props.items.length !== 1 ?
29
+
30
+ <div className={Styles.ns_action_bar}>
31
+ <button onClick={() => setState((prevState) => ({
32
+ ...prevState, isShow: !state.isShow
33
+ }))}>
34
+ Action Menu
35
+ <img
36
+ className={Styles.ns_action_menu_icon}
37
+ src="https://static.namirasoft.com/image/concept/ellipsis/vertical-blue.png"
38
+ alt="Icon"
39
+ width={8}
40
+ height={24}
41
+ />
42
+ </button>
43
+ <ul className={`${Styles.ns_action_item_holder} ${state.isShow ? Styles.ns_show : Styles.ns_hide} `}>
44
+ {props.items.map((item) =>
45
+ <li
46
+ key={item.id}
47
+ onClick={item.handler}
48
+ className={`${Styles.ns_action_item}
49
+ ${item.isActive() ? Styles.ns_active_item : Styles.ns_deActive_item}
50
+ `}
51
+ >
52
+ {item.menu_item}
53
+ </li>
54
+ )}
55
+ </ul>
56
+ </div>
57
+ :
58
+ <>
59
+ <NSButtonBlue
60
+ title={props.items[0].menu_item}
61
+ onClick={props.items[0].handler}
62
+ />
63
+ </>
64
+ }
65
+ </>
66
+ );
67
+ }
@@ -1,19 +1,25 @@
1
1
  .ns_button {
2
- align-items: center;
3
2
  background-color: transparent;
4
3
  border-radius: 8px;
5
- box-shadow: inset 0 -4px 4px 0px rgb(0 0 0 / 25%);
4
+ color: rgba(20, 27, 92, 1);
6
5
  font-size: 16px;
7
- font-weight: 400;
6
+ font-weight: 600;
8
7
  height: 48px;
8
+ display: flex;
9
9
  justify-content: center;
10
+ align-items: center;
11
+ gap: 8px;
10
12
  text-decoration: none;
11
13
  max-width: 100%;
12
- width: 100%;
13
- color: #fff;
14
- border: 1px solid transparent;
14
+ transition: all 0.2s ease-in-out;
15
15
  }
16
16
 
17
+ .ns_button:hover {
18
+ box-shadow: 0 0 10px 2px rgba(119, 117, 117, 0.4);
19
+ scale: 1.02;
20
+ }
21
+
22
+
17
23
  @media only screen and (min-width: 380px) {
18
24
  .ns_button {
19
25
  width: 272px;
@@ -1,6 +1,6 @@
1
+ import Styles from "./NSButton.module.css";
1
2
  import { IBaseComponentProps } from "../props/IBaseComponentProps";
2
3
  import { IImageProps } from "../props/IImageProps";
3
- import Styles from "./NSButton.module.css";
4
4
 
5
5
  export interface INSButtonProps extends IBaseComponentProps
6
6
  {
@@ -17,7 +17,7 @@ export default function NSButton(props: INSButtonProps)
17
17
  style={props.style}
18
18
  onClick={(e) => { props.onClick(e) }}
19
19
  >
20
- {props.icon && <img {...props.icon} />}
20
+ {props.icon && <img {...props.icon} width={24} height={24} />}
21
21
  {props.title}
22
22
  </button >
23
23
  );
@@ -1,4 +1,5 @@
1
1
  .ns_button_blue {
2
2
  background-color: rgba(3, 119, 255, 1);
3
3
  box-shadow: inset 0 -4px 4px 0px rgb(0 0 0 / 25%);
4
+ color: #fff !important;
4
5
  }
@@ -1,4 +1,5 @@
1
1
  .ns_button_green {
2
2
  background-color: #06D182;
3
3
  box-shadow: inset 0 -4px 4px 0px rgb(0 0 0 / 25%);
4
+ color: #fff !important;
4
5
  }
@@ -1,4 +1,5 @@
1
1
  .ns_button_red {
2
2
  background-color: #FF3F3F;
3
3
  box-shadow: inset 0 -4px 4px 0px rgb(0 0 0 / 25%);
4
+ color: #fff !important;
4
5
  }
@@ -9,7 +9,7 @@
9
9
  box-shadow: 0 2px 10px 4px #00000040;
10
10
  padding: 24px;
11
11
  border-radius: 24px;
12
- max-width: 272px;
12
+ max-width: 310px;
13
13
  position: relative;
14
14
  }
15
15
 
@@ -1,10 +1,25 @@
1
1
  .ns_input_parent {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- width: 272px;
4
+ width: 100%;
5
5
  color: #fff;
6
6
  position: relative;
7
- max-width: 100%;
7
+ max-width: 272px;
8
+ }
9
+
10
+ .ns_input_container {
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: flex-end;
14
+ position: relative;
15
+ width: 100%;
16
+ }
17
+
18
+ .ns_input_icon_container {
19
+ margin: 0 !important;
20
+ position: absolute;
21
+ right: 12px;
22
+
8
23
  }
9
24
 
10
25
  .ns_input {
@@ -13,10 +28,8 @@
13
28
  font-size: 16px;
14
29
  font-weight: 400;
15
30
  border: 1px solid rgba(47, 0, 236, 0.6) !important;
16
- max-width: 100%;
17
- height: max-content !important;
18
- background: no-repeat 95% center rgba(255, 255, 255, 1);
19
-
31
+ height: 48px;
32
+ width: 100%;
20
33
  }
21
34
 
22
35
  .ns_input li {
@@ -26,4 +39,11 @@
26
39
  .ns_input_title {
27
40
  font-size: 16px;
28
41
  font-weight: 400;
42
+ }
43
+
44
+
45
+ @media only screen and (min-width: 380px) {
46
+ .ns_input {
47
+ max-width: 272px;
48
+ }
29
49
  }
@@ -7,78 +7,88 @@ import { IValidationProps } from "../props/IValidationProps";
7
7
  import { IValidationStringProps } from "../props/IValidationStringProps";
8
8
  import { Validator } from "../Validator";
9
9
  import { NSInputErrorNotifier } from "./NSInputErrorNotifier";
10
- import Background from '../assets/images/icon-input-search.svg';
11
10
 
12
11
  export interface INSInputSearchProps extends IBaseComponentProps, IValidationProps, IValidationStringProps
13
12
  {
14
- title: string;
15
- defaultValue?: string;
16
- onChanged?: (e: React.ChangeEvent<HTMLInputElement>) => void;
17
- placeholder?: string;
13
+ title: string;
14
+ defaultValue?: string;
15
+ onChanged?: (e: React.ChangeEvent<HTMLInputElement>) => void;
16
+ placeholder?: string;
18
17
  }
19
18
 
20
19
  export interface NSInputSearchState
21
20
  {
22
- value: string;
23
- error?: string;
21
+ value: string;
22
+ error?: string;
24
23
  }
25
24
 
26
25
  export class NSInputSearch extends React.Component<INSInputSearchProps, NSInputSearchState>
27
26
  {
28
- constructor(props: INSInputSearchProps)
29
- {
30
- super(props);
31
- this.state = { value: props.defaultValue ?? "" };
32
- this.getValue = this.getValue.bind(this);
33
- this.setValue = this.setValue.bind(this);
34
- this.onChanged = this.onChanged.bind(this);
35
- }
36
- getError(): string | null
37
- {
38
- return (
39
- Validator.getError(this.props.title, this.state.value, this.props) &&
40
- Validator.getErrorString(this.props.title, this.state.value, this.props)
41
- );
42
- }
43
- getValue(): string
44
- {
45
- debugger
46
- let error = this.getError();
47
- if (error)
48
- {
49
- this.setState({ error });
50
- throw new Error(error);
51
- }
52
- return this.state.value;
53
- }
54
- setValue(value: string): void
55
- {
56
- this.setState({ value });
57
- }
58
- private onChanged(e: React.ChangeEvent<HTMLInputElement>): void
59
- {
60
- this.setValue(e.target.value);
61
- if (this.props.onChanged)
62
- this.props.onChanged(e);
63
- }
64
- override render()
65
- {
66
- return (
67
- <>
68
- <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
69
- <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
70
- <input
71
- id={this.props.id}
72
- value={this.state.value}
73
- onChange={this.onChanged}
74
- type="text"
75
- className={Styles.ns_input}
76
- placeholder={this.props.placeholder}
77
- style={{ backgroundImage: `url(${Background})` }}
78
- />
79
- </div>
80
- <NSInputErrorNotifier error={this.state.error} />
81
- </>
82
- );
83
- }
27
+ constructor(props: INSInputSearchProps)
28
+ {
29
+ super(props);
30
+ this.state = { value: props.defaultValue ?? "" };
31
+ this.getValue = this.getValue.bind(this);
32
+ this.setValue = this.setValue.bind(this);
33
+ this.onChanged = this.onChanged.bind(this);
34
+ }
35
+ getError(): string | null
36
+ {
37
+ return (
38
+ Validator.getError(this.props.title, this.state.value, this.props) &&
39
+ Validator.getErrorString(this.props.title, this.state.value, this.props)
40
+ );
41
+ }
42
+ getValue(): string
43
+ {
44
+ debugger
45
+ let error = this.getError();
46
+ if (error)
47
+ {
48
+ this.setState({ error });
49
+ throw new Error(error);
50
+ }
51
+ return this.state.value;
52
+ }
53
+ setValue(value: string): void
54
+ {
55
+ this.setState({ value });
56
+ }
57
+ private onChanged(e: React.ChangeEvent<HTMLInputElement>): void
58
+ {
59
+ this.setValue(e.target.value);
60
+ if (this.props.onChanged)
61
+ this.props.onChanged(e);
62
+ }
63
+ override render()
64
+ {
65
+ return (
66
+ <>
67
+ <div className={`${Styles.ns_input_parent} ${this.props.classList?.join(" ")}`} style={this.props.style}>
68
+ <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
69
+ <div className={Styles.ns_input_container}>
70
+ <figure className={Styles.ns_input_icon_container}>
71
+ <img
72
+ src="/static/media/icon-input-search.4d82efd478e5b2ebac81964cfb394705.svg"
73
+ alt="input-icon"
74
+ width={24}
75
+ height={24}
76
+ />
77
+ </figure>
78
+ <input
79
+ id={this.props.id}
80
+ value={this.state.value}
81
+ onChange={this.onChanged}
82
+ type="text"
83
+ className={Styles.ns_input}
84
+ placeholder={this.props.placeholder}
85
+ // style={{ backgroundImage: `url(${Background})` }}
86
+ />
87
+
88
+ </div>
89
+ </div>
90
+ <NSInputErrorNotifier error={this.state.error} />
91
+ </>
92
+ );
93
+ }
84
94
  }
@@ -0,0 +1,45 @@
1
+ .title {
2
+ text-align: center;
3
+ color: rgba(20, 27, 92, 1);
4
+ }
5
+
6
+ .description {
7
+ text-align: center;
8
+ color: rgba(20, 27, 92, 1);
9
+ margin: 0px;
10
+ }
11
+
12
+ .ns_action_bar_holder {
13
+ padding: 16px;
14
+ position: sticky;
15
+ top: 0;
16
+ background-color: rgba(20, 27, 92, 0.3);
17
+ width: 100%;
18
+ height: 100%;
19
+ display: flex;
20
+ flex-direction: row;
21
+ flex-wrap: wrap;
22
+ justify-content: center;
23
+ align-items: center;
24
+ }
25
+
26
+ .ns_actions_hodler {
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ flex-direction: row;
31
+ flex-wrap: wrap;
32
+ gap: 16px;
33
+ }
34
+
35
+ @media only screen and (min-width: 768px) {
36
+ .ns_action_bar_holder {
37
+ justify-content: space-between;
38
+ min-height: 80px;
39
+ }
40
+
41
+ .ns_action_bar_title {
42
+ display: flex;
43
+ }
44
+
45
+ }