@infonomic/uikit 6.0.5 → 6.2.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 (73) hide show
  1. package/dist/components/inputs/input.module.css +7 -0
  2. package/dist/components/inputs/input_module.css +4 -0
  3. package/dist/components/inputs/select.d.ts +3 -2
  4. package/dist/components/inputs/select.d.ts.map +1 -1
  5. package/dist/components/inputs/select.js +10 -5
  6. package/dist/components/inputs/text-area.module.css +15 -9
  7. package/dist/components/inputs/text-area_module.css +4 -0
  8. package/dist/styles/components-vanilla.css +1 -1
  9. package/dist/widgets/drawer/drawer-container.d.ts.map +1 -1
  10. package/dist/widgets/drawer/drawer-container.js +0 -1
  11. package/dist/widgets/drawer/drawer.d.ts +1 -1
  12. package/dist/widgets/drawer/drawer.d.ts.map +1 -1
  13. package/dist/widgets/drawer/drawer.js +34 -49
  14. package/dist/widgets/drawer/drawer.module.css +66 -54
  15. package/dist/widgets/drawer/drawer.module.js +3 -5
  16. package/dist/widgets/drawer/drawer_module.css +47 -81
  17. package/dist/widgets/modal/modal.d.ts +1 -1
  18. package/dist/widgets/modal/modal.d.ts.map +1 -1
  19. package/dist/widgets/modal/modal.js +23 -36
  20. package/dist/widgets/modal/modal.module.css +50 -9
  21. package/dist/widgets/modal/modal.module.js +1 -0
  22. package/dist/widgets/modal/modal_module.css +40 -8
  23. package/package.json +1 -1
  24. package/src/components/inputs/input.module.css +7 -0
  25. package/src/components/inputs/select.stories.tsx +19 -35
  26. package/src/components/inputs/select.tsx +12 -4
  27. package/src/components/inputs/text-area.module.css +15 -9
  28. package/src/styles/local-fonts.css +5 -1
  29. package/src/widgets/drawer/drawer-container.tsx +0 -1
  30. package/src/widgets/drawer/drawer.module.css +66 -54
  31. package/src/widgets/drawer/drawer.stories.tsx +51 -5
  32. package/src/widgets/drawer/drawer.tsx +33 -50
  33. package/src/widgets/modal/modal.module.css +50 -9
  34. package/src/widgets/modal/modal.tsx +27 -45
  35. package/dist/components/overlay/index.d.ts +0 -2
  36. package/dist/components/overlay/index.d.ts.map +0 -1
  37. package/dist/components/overlay/index.js +0 -1
  38. package/dist/components/overlay/overlay.d.ts +0 -9
  39. package/dist/components/overlay/overlay.d.ts.map +0 -1
  40. package/dist/components/overlay/overlay.js +0 -51
  41. package/dist/components/overlay/overlay.module.css +0 -56
  42. package/dist/components/overlay/overlay.module.js +0 -13
  43. package/dist/components/overlay/overlay_module.css +0 -46
  44. package/dist/hooks/use-focus-trap/index.d.ts +0 -2
  45. package/dist/hooks/use-focus-trap/index.d.ts.map +0 -1
  46. package/dist/hooks/use-focus-trap/scope-tab.d.ts +0 -11
  47. package/dist/hooks/use-focus-trap/scope-tab.d.ts.map +0 -1
  48. package/dist/hooks/use-focus-trap/tabbable.d.ts +0 -14
  49. package/dist/hooks/use-focus-trap/tabbable.d.ts.map +0 -1
  50. package/dist/hooks/use-focus-trap/use-focus-trap.d.ts +0 -11
  51. package/dist/hooks/use-focus-trap/use-focus-trap.d.ts.map +0 -1
  52. package/dist/utils/getPortalRoot.d.ts +0 -2
  53. package/dist/utils/getPortalRoot.d.ts.map +0 -1
  54. package/dist/widgets/drawer/drawer-wrapper.d.ts +0 -9
  55. package/dist/widgets/drawer/drawer-wrapper.d.ts.map +0 -1
  56. package/dist/widgets/drawer/drawer-wrapper.js +0 -37
  57. package/dist/widgets/drawer/motionDomAnimation.d.ts +0 -3
  58. package/dist/widgets/drawer/motionDomAnimation.d.ts.map +0 -1
  59. package/dist/widgets/drawer/motionDomMax.d.ts +0 -3
  60. package/dist/widgets/drawer/motionDomMax.d.ts.map +0 -1
  61. package/dist/widgets/modal/modal-wrapper.d.ts +0 -8
  62. package/dist/widgets/modal/modal-wrapper.d.ts.map +0 -1
  63. package/dist/widgets/modal/modal-wrapper.js +0 -37
  64. package/dist/widgets/modal/motionDomAnimation.d.ts +0 -3
  65. package/dist/widgets/modal/motionDomAnimation.d.ts.map +0 -1
  66. package/dist/widgets/modal/motionDomMax.d.ts +0 -3
  67. package/dist/widgets/modal/motionDomMax.d.ts.map +0 -1
  68. package/src/components/overlay/index.stories.tsx +0 -26
  69. package/src/components/overlay/index.ts +0 -2
  70. package/src/components/overlay/overlay.module.css +0 -56
  71. package/src/components/overlay/overlay.tsx +0 -70
  72. package/src/widgets/drawer/drawer-wrapper.tsx +0 -53
  73. package/src/widgets/modal/modal-wrapper.tsx +0 -51
@@ -1,113 +1,91 @@
1
1
  @layer infonomic-base, infonomic-utilities, infonomic-theme;
2
2
 
3
3
  @layer infonomic-components {
4
- :is(.drawer-wrapper-q0hBzd, .infonomic-drawer-wrapper) {
5
- z-index: 30;
6
- opacity: 1;
7
- flex-direction: column;
8
- justify-content: end;
9
- display: flex;
4
+ :is(.backdrop-Ga1s55, .infonomic-drawer-backdrop) {
5
+ background-color: #f5f5f559;
6
+ transition: opacity .2s;
10
7
  position: fixed;
11
8
  inset: 0;
12
9
  }
13
10
 
14
- :is(.drawer-container-ssf1qn, .infonomic-drawer-container) {
15
- background-color: var(--surface-panel);
16
- height: 100%;
17
- box-shadow: var(--shadow-md);
18
- z-index: inherit;
19
- position: absolute;
20
- right: 0;
11
+ .backdrop-Ga1s55[data-starting-style], .backdrop-Ga1s55[data-ending-style] {
12
+ opacity: 0;
21
13
  }
22
14
 
23
- .drawer-container-ssf1qn[aria-hidden="false"] {
24
- animation: .15s cubic-bezier(.16, 1, .3, 1) slideIn-dDQJvD;
15
+ .dark .backdrop-Ga1s55 {
16
+ background-color: #00000080;
25
17
  }
26
18
 
27
- .infonomic-drawer-container[aria-hidden="false"] {
28
- animation: .15s cubic-bezier(.16, 1, .3, 1) slideIn-dDQJvD;
19
+ [data-theme="dark"] .backdrop-Ga1s55 {
20
+ background-color: #00000080;
29
21
  }
30
22
 
31
- .drawer-depth-0-VYE9YM.drawer-medium-ZFbdby .drawer-container-ssf1qn, .drawer-depth-0-VYE9YM.drawer-wide-nXbxPs .drawer-container-ssf1qn {
32
- width: 90%;
23
+ .dark .infonomic-drawer-backdrop {
24
+ background-color: #00000080;
33
25
  }
34
26
 
35
- .infonomic-drawer-depth-0.drawer-medium .drawer-container {
36
- width: 90%;
27
+ [data-theme="dark"] .infonomic-drawer-backdrop {
28
+ background-color: #00000080;
37
29
  }
38
30
 
39
- .infonomic-drawer-depth-0.drawer-wide .drawer-container {
40
- width: 90%;
31
+ :is(.drawer-wrapper-q0hBzd, .infonomic-drawer-wrapper) {
32
+ background-color: var(--surface-panel);
33
+ box-shadow: var(--shadow-md);
34
+ flex-direction: column;
35
+ transition: transform .2s cubic-bezier(.16, 1, .3, 1);
36
+ display: flex;
37
+ position: fixed;
38
+ top: 0;
39
+ bottom: 0;
40
+ right: 0;
41
+ overflow: hidden;
41
42
  }
42
43
 
43
- .drawer-depth-1-2CzoWM.drawer-medium-ZFbdby .drawer-container-ssf1qn, .drawer-depth-1-2CzoWM.drawer-wide-nXbxPs .drawer-container-ssf1qn {
44
- width: 88%;
44
+ .drawer-wrapper-q0hBzd[data-open] {
45
+ transform: translateX(var(--drawer-swipe-movement-x, 0px));
45
46
  }
46
47
 
47
- .infonomic-drawer-depth-1.drawer-medium .drawer-container {
48
- width: 88%;
48
+ .drawer-wrapper-q0hBzd[data-closed], .drawer-wrapper-q0hBzd[data-starting-style] {
49
+ transform: translateX(100%);
49
50
  }
50
51
 
51
- .infonomic-drawer-depth-1.drawer-wide .drawer-container {
52
- width: 88%;
52
+ .drawer-wrapper-q0hBzd[data-swiping] {
53
+ transition: none;
53
54
  }
54
55
 
55
- .drawer-depth-2-eR43PT.drawer--tSM0mV .drawer-container-ssf1qn, .drawer-depth-2-eR43PT.drawer-wide-nXbxPs .drawer-container-ssf1qn {
56
- width: 86%;
56
+ :is(.drawer-container-ssf1qn, .infonomic-drawer-container) {
57
+ height: 100%;
57
58
  }
58
59
 
59
- .infonomic-drawer-depth-2.drawer-medium .drawer-container {
60
- width: 86%;
60
+ :is(.drawer-narrow-lsLgHp, .infonomic-drawer-narrow) {
61
+ width: calc(100% - 32px);
62
+ max-width: 400px;
61
63
  }
62
64
 
63
- .infonomic-drawer-depth-2.drawer-wide .drawer-container {
65
+ .drawer-depth-0-VYE9YM.drawer-medium-ZFbdby, .drawer-depth-0-VYE9YM.drawer-wide-nXbxPs {
66
+ width: 90%;
67
+ }
68
+
69
+ .drawer-depth-1-2CzoWM.drawer-medium-ZFbdby, .drawer-depth-1-2CzoWM.drawer-wide-nXbxPs {
70
+ width: 88%;
71
+ }
72
+
73
+ .drawer-depth-2-eR43PT.drawer-medium-ZFbdby, .drawer-depth-2-eR43PT.drawer-wide-nXbxPs {
64
74
  width: 86%;
65
75
  }
66
76
 
67
77
  @media (min-width: 48rem) {
68
- .drawer-depth-0-VYE9YM.drawer-medium-ZFbdby .drawer-container-ssf1qn {
69
- width: 600px;
70
- }
71
-
72
- .infonomic-drawer-depth-0.drawer-medium .drawer-container {
78
+ .drawer-depth-0-VYE9YM.drawer-medium-ZFbdby {
73
79
  width: 600px;
74
80
  }
75
81
 
76
- .drawer-depth-1-2CzoWM.drawer-medium-ZFbdby .drawer-container-ssf1qn {
77
- width: 580px;
78
- }
79
-
80
- .infonomic-drawer-depth-1.drawer-medium .drawer-container {
82
+ .drawer-depth-1-2CzoWM.drawer-medium-ZFbdby {
81
83
  width: 580px;
82
84
  }
83
85
 
84
- .drawer-depth-2-eR43PT.drawer--tSM0mV .drawer-container-ssf1qn {
86
+ .drawer-depth-2-eR43PT.drawer-medium-ZFbdby {
85
87
  width: 560px;
86
88
  }
87
-
88
- .infonomic-drawer-depth-2.drawer-medium .drawer-container {
89
- width: 560px;
90
- }
91
- }
92
-
93
- .drawer-narrow-lsLgHp .drawer-container-ssf1qn {
94
- width: calc(100% - 32px);
95
- max-width: 400px;
96
- }
97
-
98
- .infonomic-drawer-narrow .infonomic-drawer-container {
99
- width: calc(100% - 32px);
100
- max-width: 400px;
101
- }
102
-
103
- .drawer-container-ssf1qn[aria-hidden="true"] {
104
- opacity: 0;
105
- transform: translateX(100%);
106
- }
107
-
108
- .infonomic-drawer-container[aria-hidden="true"] {
109
- opacity: 0;
110
- transform: translateX(100%);
111
89
  }
112
90
 
113
91
  :is(.drawer-top-actions-FiHu4U, .infonomic-drawer-top-actions) {
@@ -147,17 +125,5 @@
147
125
  :is(.drawer-content-QQqzOR, .infonomic-drawer-content) {
148
126
  padding: var(--spacing-12);
149
127
  }
150
-
151
- @keyframes slideIn-dDQJvD {
152
- from {
153
- opacity: 0;
154
- transform: translateX(100%);
155
- }
156
-
157
- to {
158
- opacity: 1;
159
- transform: translateX(0);
160
- }
161
- }
162
128
  }
163
129
 
@@ -15,7 +15,7 @@ export declare function useModal(): {
15
15
  isOpen: boolean;
16
16
  setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;
17
17
  };
18
- declare function Modal({ isOpen, onDismiss, closeOnOverlayClick, children, ...rest }: ModalProps): React.ReactPortal | null;
18
+ declare function Modal({ isOpen, onDismiss, closeOnOverlayClick, children, }: ModalProps): React.JSX.Element;
19
19
  declare namespace Modal {
20
20
  var displayName: string;
21
21
  var Container: ({ ref, children, className, ...rest }: import("./modal-container").ModalContainerProps & {
@@ -1 +1 @@
1
- {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/widgets/modal/modal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAoB9B,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,eAAO,MAAM,YAAY;gBACX,MAAM,IAAI;EAClB,CAAA;AAEN,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAA;AAEvD,wBAAgB,QAAQ,IAAI;IAC1B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD,CAiBA;AAED,iBAAS,KAAK,CAAC,EACb,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,UAAU,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAkCvC;kBAxCQ,KAAK;;;WAjDK,CAAC;;;WAAnB,CAAC;;;WAAK,CAAC;;;WAAD,CAAC;;;AAkGR,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/widgets/modal/modal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,eAAO,MAAM,YAAY;gBACX,MAAM,IAAI;EAClB,CAAA;AAEN,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAA;AAEvD,wBAAgB,QAAQ,IAAI;IAC1B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD,CAiBA;AAED,iBAAS,KAAK,CAAC,EACb,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,QAAQ,GACT,EAAE,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA0BhC;kBA/BQ,KAAK;;;WArCN,CAAC;;;WAF2B,CAAC;;;WAAK,CAAC;;;WAAD,CAAC;;;AA+E3C,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -1,18 +1,13 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { createContext, useCallback, useState } from "react";
4
- import { AnimatePresence, LazyMotion } from "motion/react";
5
- import { createPortal } from "react-dom";
6
- import { Overlay } from "../../components/overlay/index.js";
7
- import { useMediaQuery } from "../../hooks/use-media-query.js";
8
- import { getPortalRoot } from "../../utils/getPortalRoot.js";
4
+ import { Dialog } from "@base-ui/react/dialog";
5
+ import classnames from "classnames";
6
+ import modal_module from "./modal.module.js";
9
7
  import { ModalActions } from "./modal-actions.js";
10
8
  import { ModalContainer } from "./modal-container.js";
11
9
  import { ModalContent } from "./modal-content.js";
12
10
  import { ModalHeader } from "./modal-header.js";
13
- import { ModalWrapper } from "./modal-wrapper.js";
14
- const DomMax = async ()=>await import("./motionDomMax.js").then((mod)=>mod.default);
15
- const DomAnimation = async ()=>await import("./motionDomAnimation.js").then((mod)=>mod.default);
16
11
  const ModalContext = /*#__PURE__*/ createContext({});
17
12
  function useModal() {
18
13
  const [isOpen, setIsOpen] = useState(false);
@@ -29,39 +24,31 @@ function useModal() {
29
24
  setIsOpen
30
25
  };
31
26
  }
32
- function Modal({ isOpen, onDismiss, closeOnOverlayClick, children, ...rest }) {
33
- const isMobile = useMediaQuery('(max-width: 768px)') ?? false;
34
- const handleOverlayDismiss = (e)=>{
35
- e.stopPropagation();
36
- e.preventDefault();
37
- if (true === closeOnOverlayClick) onDismiss?.();
38
- };
39
- const portal = getPortalRoot();
40
- if (false === portal) return null;
41
- return /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(ModalContext.Provider, {
27
+ function Modal({ isOpen, onDismiss, closeOnOverlayClick, children }) {
28
+ return /*#__PURE__*/ jsx(ModalContext.Provider, {
42
29
  value: {
43
30
  onDismiss
44
31
  },
45
- children: /*#__PURE__*/ jsx(LazyMotion, {
46
- features: isMobile ? DomMax : DomAnimation,
47
- children: /*#__PURE__*/ jsx(AnimatePresence, {
48
- children: true === isOpen && /*#__PURE__*/ jsxs(ModalWrapper, {
49
- transition: {
50
- duration: 0.2
51
- },
52
- onEscapeKey: handleOverlayDismiss,
53
- ...rest,
54
- children: [
55
- /*#__PURE__*/ jsx(Overlay, {
56
- onClick: handleOverlayDismiss,
57
- isUnmounting: !(isOpen ?? false)
58
- }),
59
- children
60
- ]
61
- })
32
+ children: /*#__PURE__*/ jsx(Dialog.Root, {
33
+ open: isOpen,
34
+ onOpenChange: (open)=>{
35
+ if (!open) onDismiss?.();
36
+ },
37
+ modal: true,
38
+ disablePointerDismissal: true !== closeOnOverlayClick,
39
+ children: /*#__PURE__*/ jsxs(Dialog.Portal, {
40
+ children: [
41
+ /*#__PURE__*/ jsx(Dialog.Backdrop, {
42
+ className: classnames('infonomic-modal-backdrop', modal_module.backdrop)
43
+ }),
44
+ /*#__PURE__*/ jsx(Dialog.Popup, {
45
+ className: classnames('infonomic-modal-wrapper', modal_module["modal-wrapper"]),
46
+ children: children
47
+ })
48
+ ]
62
49
  })
63
50
  })
64
- }), portal);
51
+ });
65
52
  }
66
53
  Modal.displayName = 'Modal';
67
54
  Modal.Container = ModalContainer;
@@ -1,33 +1,72 @@
1
1
  @layer infonomic-base, infonomic-utilities, infonomic-theme, infonomic-components;
2
2
 
3
3
  @layer infonomic-components {
4
+
5
+ /* Backdrop overlay */
6
+
7
+ .backdrop,
8
+ :global(.infonomic-modal-backdrop) {
9
+ position: fixed;
10
+ top: 0;
11
+ left: 0;
12
+ right: 0;
13
+ bottom: 0;
14
+ background-color: rgba(245, 245, 245, 0.35);
15
+ transition: opacity 200ms ease;
16
+ }
17
+
18
+ .backdrop[data-starting-style],
19
+ .backdrop[data-ending-style] {
20
+ opacity: 0;
21
+ }
22
+
23
+ :global(.dark) .backdrop,
24
+ :global([data-theme="dark"]) .backdrop,
25
+ :global(.dark .infonomic-modal-backdrop),
26
+ :global([data-theme="dark"] .infonomic-modal-backdrop) {
27
+ background-color: rgba(0, 0, 0, 0.5);
28
+ }
29
+
30
+ /* Modal wrapper / popup — the dialog surface */
31
+
4
32
  .modal-wrapper,
5
- :global(.infonomic-modal-open) {
33
+ :global(.infonomic-modal-wrapper) {
6
34
  position: fixed;
7
35
  display: flex;
8
36
  flex-direction: column;
9
- justify-content: center;
37
+ justify-content: flex-end;
10
38
  align-items: center;
11
39
  top: 0;
12
40
  left: 0;
13
41
  right: 0;
14
42
  bottom: 0;
15
- z-index: 30;
16
- opacity: 1;
43
+ transition: opacity 200ms ease;
44
+ }
45
+
46
+ .modal-wrapper[data-starting-style],
47
+ .modal-wrapper[data-ending-style] {
48
+ opacity: 0;
17
49
  }
18
50
 
51
+ @media screen and (min-width: 40rem) {
52
+
53
+ .modal-wrapper,
54
+ :global(.infonomic-modal-wrapper) {
55
+ justify-content: center;
56
+ }
57
+ }
58
+
59
+ /* Container — the visible dialog box */
60
+
19
61
  .modal-container,
20
62
  :global(.infonomic-modal-container) {
21
- position: absolute;
22
63
  display: flex;
23
64
  flex-direction: column;
24
65
  box-shadow: var(--shadow-md);
25
66
  border-radius: var(--border-radius-md);
26
- z-index: 20;
27
67
  min-height: 300px;
28
68
  max-height: 88vh;
29
69
  width: 100%;
30
- bottom: 0;
31
70
  background-color: var(--surface-panel);
32
71
  border: 1px solid var(--border-color);
33
72
  margin-left: var(--spacing-8);
@@ -35,15 +74,17 @@
35
74
  }
36
75
 
37
76
  @media screen and (min-width: 40rem) {
77
+
38
78
  .modal-container,
39
79
  :global(.infonomic-modal-container) {
40
80
  max-height: calc(100vh - 24px);
41
81
  min-height: auto;
42
- bottom: auto;
43
82
  width: auto;
44
83
  }
45
84
  }
46
85
 
86
+ /* Sub-component styles */
87
+
47
88
  .modal-header,
48
89
  :global(.infonomic-modal-header) {
49
90
  display: flex;
@@ -86,4 +127,4 @@
86
127
  padding-left: var(--spacing-16);
87
128
  padding-right: var(--spacing-16);
88
129
  }
89
- }
130
+ }
@@ -1,5 +1,6 @@
1
1
  import "./modal_module.css";
2
2
  const modal_module = {
3
+ backdrop: "backdrop-BgKon2",
3
4
  "modal-wrapper": "modal-wrapper-wF5Mv1",
4
5
  modalWrapper: "modal-wrapper-wF5Mv1",
5
6
  "modal-container": "modal-container-PPkPyj",
@@ -1,21 +1,56 @@
1
1
  @layer infonomic-base, infonomic-utilities, infonomic-theme;
2
2
 
3
3
  @layer infonomic-components {
4
- :is(.modal-wrapper-wF5Mv1, .infonomic-modal-open) {
5
- z-index: 30;
6
- opacity: 1;
4
+ :is(.backdrop-BgKon2, .infonomic-modal-backdrop) {
5
+ background-color: #f5f5f559;
6
+ transition: opacity .2s;
7
+ position: fixed;
8
+ inset: 0;
9
+ }
10
+
11
+ .backdrop-BgKon2[data-starting-style], .backdrop-BgKon2[data-ending-style] {
12
+ opacity: 0;
13
+ }
14
+
15
+ .dark .backdrop-BgKon2 {
16
+ background-color: #00000080;
17
+ }
18
+
19
+ [data-theme="dark"] .backdrop-BgKon2 {
20
+ background-color: #00000080;
21
+ }
22
+
23
+ .dark .infonomic-modal-backdrop {
24
+ background-color: #00000080;
25
+ }
26
+
27
+ [data-theme="dark"] .infonomic-modal-backdrop {
28
+ background-color: #00000080;
29
+ }
30
+
31
+ :is(.modal-wrapper-wF5Mv1, .infonomic-modal-wrapper) {
7
32
  flex-direction: column;
8
- justify-content: center;
33
+ justify-content: flex-end;
9
34
  align-items: center;
35
+ transition: opacity .2s;
10
36
  display: flex;
11
37
  position: fixed;
12
38
  inset: 0;
13
39
  }
14
40
 
41
+ .modal-wrapper-wF5Mv1[data-starting-style], .modal-wrapper-wF5Mv1[data-ending-style] {
42
+ opacity: 0;
43
+ }
44
+
45
+ @media screen and (min-width: 40rem) {
46
+ :is(.modal-wrapper-wF5Mv1, .infonomic-modal-wrapper) {
47
+ justify-content: center;
48
+ }
49
+ }
50
+
15
51
  :is(.modal-container-PPkPyj, .infonomic-modal-container) {
16
52
  box-shadow: var(--shadow-md);
17
53
  border-radius: var(--border-radius-md);
18
- z-index: 20;
19
54
  background-color: var(--surface-panel);
20
55
  border: 1px solid var(--border-color);
21
56
  width: 100%;
@@ -25,8 +60,6 @@
25
60
  margin-right: var(--spacing-8);
26
61
  flex-direction: column;
27
62
  display: flex;
28
- position: absolute;
29
- bottom: 0;
30
63
  }
31
64
 
32
65
  @media screen and (min-width: 40rem) {
@@ -34,7 +67,6 @@
34
67
  width: auto;
35
68
  min-height: auto;
36
69
  max-height: calc(100vh - 24px);
37
- bottom: auto;
38
70
  }
39
71
  }
40
72
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@infonomic/uikit",
3
3
  "private": false,
4
4
  "license": "MIT",
5
- "version": "6.0.5",
5
+ "version": "6.2.0",
6
6
  "type": "module",
7
7
  "description": "Infonomic UI kit is a collection of reusable UI components and utilities for React and Astro.",
8
8
  "keywords": [
@@ -160,6 +160,13 @@ infonomic-components;
160
160
  border-bottom: 1px solid var(--input-variant-underlined-hover-border);
161
161
  }
162
162
 
163
+ .underlined:focus,
164
+ .underlined:active,
165
+ :global(.infonomic-input-underlined):focus,
166
+ :global(.infonomic-input-underlined):active {
167
+ outline: none;
168
+ }
169
+
163
170
  .filled,
164
171
  :global(.infonomic-input-filled) {
165
172
  background-color: var(--input-variant-filled);
@@ -21,50 +21,34 @@ export const Default = (): React.JSX.Element => {
21
21
  return (
22
22
  <>
23
23
  <div style={{ maxWidth: '600px', margin: '2rem auto' }}>
24
- <Select size="xl" placeholder="Select one..." helpText="Extra Large select.">
25
- {values.map((value) => (
26
- <SelectItem key={value.value} value={value.value}>
27
- {value.label}
28
- </SelectItem>
29
- ))}
30
- </Select>
24
+ <Select items={values} size="xl" placeholder="Select one..." helpText="Extra Large select." />
31
25
  </div>
32
26
  <div style={{ maxWidth: '600px', margin: '2rem auto' }}>
33
- <Select size="lg" placeholder="Select one..." helpText="Large select.">
34
- {values.map((value) => (
35
- <SelectItem key={value.value} value={value.value}>
36
- {value.label}
37
- </SelectItem>
38
- ))}
39
- </Select>
27
+ <Select items={values} size="lg" placeholder="Select one..." helpText="Large select." />
40
28
  </div>
41
29
  <div style={{ maxWidth: '600px', margin: '2rem auto' }}>
42
- <Select size="md" placeholder="Select one..." helpText="Medium select.">
43
- {values.map((value) => (
44
- <SelectItem key={value.value} value={value.value}>
45
- {value.label}
46
- </SelectItem>
47
- ))}
48
- </Select>
30
+ <Select items={values} size="md" placeholder="Select one..." helpText="Medium select." />
49
31
  </div>
50
32
  <div style={{ maxWidth: '600px', margin: '2rem auto' }}>
51
- <Select size="sm" placeholder="Select one..." helpText="Small select.">
52
- {values.map((value) => (
53
- <SelectItem key={value.value} value={value.value}>
54
- {value.label}
55
- </SelectItem>
56
- ))}
57
- </Select>
33
+ <Select items={values} size="sm" placeholder="Select one..." helpText="Small select." />
58
34
  </div>
59
35
  <div style={{ maxWidth: '600px', margin: '2rem auto' }}>
60
- <Select size="xs" placeholder="Select one..." helpText="Extra small select.">
61
- {values.map((value) => (
62
- <SelectItem key={value.value} value={value.value}>
63
- {value.label}
64
- </SelectItem>
65
- ))}
66
- </Select>
36
+ <Select items={values} size="xs" placeholder="Select one..." helpText="Extra small select." />
67
37
  </div>
68
38
  </>
69
39
  )
70
40
  }
41
+
42
+ export const CustomChildren = (): React.JSX.Element => {
43
+ return (
44
+ <div style={{ maxWidth: '600px', margin: '2rem auto' }}>
45
+ <Select items={values} size="md" placeholder="Select one..." helpText="Custom children rendering.">
46
+ {values.map((value) => (
47
+ <SelectItem key={value.value} value={value.value} label={value.label}>
48
+ {value.prefix}{value.label}{value.suffix}
49
+ </SelectItem>
50
+ ))}
51
+ </Select>
52
+ </div>
53
+ )
54
+ }
@@ -21,7 +21,7 @@ export interface SelectValue {
21
21
  suffix?: string
22
22
  }
23
23
 
24
- type SelectProps = React.ComponentProps<typeof SelectPrimitive.Root> & {
24
+ type SelectProps = Omit<React.ComponentProps<typeof SelectPrimitive.Root>, 'items'> & {
25
25
  id?: string
26
26
  intent?: Intent
27
27
  variant?: Variant
@@ -33,6 +33,7 @@ type SelectProps = React.ComponentProps<typeof SelectPrimitive.Root> & {
33
33
  disabledValue?: string
34
34
  ariaLabel?: string
35
35
  helpText?: string
36
+ items?: SelectValue[]
36
37
  }
37
38
 
38
39
  export function Select({
@@ -48,11 +49,12 @@ export function Select({
48
49
  className,
49
50
  ariaLabel,
50
51
  helpText,
52
+ items,
51
53
  ...rest
52
54
  }: SelectProps): React.JSX.Element {
53
55
  return (
54
56
  <div className={cx('infonomic-select-container', containerClassName)}>
55
- <SelectPrimitive.Root {...rest}>
57
+ <SelectPrimitive.Root items={items} {...rest}>
56
58
  <SelectPrimitive.Trigger
57
59
  aria-label={ariaLabel ?? 'Select'}
58
60
  render={
@@ -70,6 +72,7 @@ export function Select({
70
72
  <ChevronDownIcon />
71
73
  </SelectPrimitive.Icon>
72
74
  </SelectPrimitive.Trigger>
75
+
73
76
  <SelectPrimitive.Portal>
74
77
  <SelectPrimitive.Positioner
75
78
  className={styles.positioner}
@@ -80,7 +83,11 @@ export function Select({
80
83
  </SelectPrimitive.ScrollUpArrow>
81
84
  <SelectPrimitive.Popup className={cx(styles.popup, size != null && styles[`popup-${size}`])}>
82
85
  <SelectPrimitive.List className={styles.list}>
83
- {children}
86
+ {children ?? items?.map((item) => (
87
+ <SelectItem key={item.value} value={item.value} label={item.label}>
88
+ {item.label}
89
+ </SelectItem>
90
+ ))}
84
91
  </SelectPrimitive.List>
85
92
  </SelectPrimitive.Popup>
86
93
  <SelectPrimitive.ScrollDownArrow className={styles['scroll-arrow']}>
@@ -88,6 +95,7 @@ export function Select({
88
95
  </SelectPrimitive.ScrollDownArrow>
89
96
  </SelectPrimitive.Positioner>
90
97
  </SelectPrimitive.Portal>
98
+
91
99
  </SelectPrimitive.Root>
92
100
  {helpText != null && helpText?.length > 0 && <HelpText text={helpText} />}
93
101
  </div>
@@ -108,12 +116,12 @@ export const SelectItem = ({
108
116
  {...props}
109
117
  ref={forwardedRef}
110
118
  >
111
- <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
112
119
  <SelectPrimitive.ItemIndicator
113
120
  className={cx('infonomic-select-item-indicator', styles['select-item-indicator'])}
114
121
  >
115
122
  <CheckIcon />
116
123
  </SelectPrimitive.ItemIndicator>
124
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
117
125
  </SelectPrimitive.Item>
118
126
  )
119
127
  }
@@ -1,11 +1,12 @@
1
1
  @layer infonomic-base,
2
- infonomic-functional,
3
- infonomic-utilities,
4
- infonomic-theme,
5
- infonomic-typography,
6
- infonomic-components;
2
+ infonomic-functional,
3
+ infonomic-utilities,
4
+ infonomic-theme,
5
+ infonomic-typography,
6
+ infonomic-components;
7
7
 
8
8
  @layer infonomic-components {
9
+
9
10
  .text-area,
10
11
  :global(.infonomic-text-area) {
11
12
  font-size: 1rem;
@@ -19,9 +20,14 @@
19
20
  padding-right: 0;
20
21
  }
21
22
 
22
- .outlined {
23
+ .underlined:focus,
24
+ .underlined:active,
25
+ :global(.infonomic-text-area--underlined):focus,
26
+ :global(.infonomic-text-area--underlined):active {
27
+ outline: none;
23
28
  }
24
29
 
25
- .filled {
26
- }
27
- }
30
+ .outlined {}
31
+
32
+ .filled {}
33
+ }