@bit.rhplus/ui.f7.detail-item 0.0.4 → 0.0.5
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/dist/index.d.ts +2 -1
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/style.css +51 -0
- package/index.jsx +21 -3
- package/package.json +4 -3
- package/style.css +51 -0
- /package/dist/{preview-1757428602780.js → preview-1757511122465.js} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default DetailItem;
|
|
2
2
|
export { Link } from "framework7-react";
|
|
3
|
-
declare function DetailItem({ title, subtitle, footer, input, children, className, style, value, onChange, disabled, ...restProps }: {
|
|
3
|
+
declare function DetailItem({ title, subtitle, footer, input, children, className, style, showValidationIcon, value, onChange, disabled, ...restProps }: {
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
title: any;
|
|
6
6
|
subtitle: any;
|
|
@@ -9,6 +9,7 @@ declare function DetailItem({ title, subtitle, footer, input, children, classNam
|
|
|
9
9
|
children: any;
|
|
10
10
|
className?: string | undefined;
|
|
11
11
|
style: any;
|
|
12
|
+
showValidationIcon?: boolean | undefined;
|
|
12
13
|
value: any;
|
|
13
14
|
onChange: any;
|
|
14
15
|
disabled: any;
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/* eslint-disable */
|
|
3
3
|
import React from 'react';
|
|
4
|
+
import { Form } from '@bit.rhplus/ui.form';
|
|
5
|
+
import { CircleAlert } from 'lucide-react';
|
|
4
6
|
import ListItem from '@bit.rhplus/ui.f7.list-item';
|
|
5
7
|
import './style.css';
|
|
6
|
-
// Základní DetailItem komponenta s podporou Ant Design Form props
|
|
7
|
-
const DetailItem = ({ title, subtitle, footer, input, children, className = '', style,
|
|
8
|
+
// Základní DetailItem komponenta s podporou Ant Design Form props a validační ikony
|
|
9
|
+
const DetailItem = ({ title, subtitle, footer, input, children, className = '', style, showValidationIcon = false, // Nový prop pro aktivaci validační ikony
|
|
8
10
|
// Ant Design Form props pro předání input komponentě
|
|
9
11
|
value, onChange, disabled, ...restProps }) => {
|
|
12
|
+
// Získání validačního stavu pomocí useStatus hook
|
|
13
|
+
let hasValidationError = false;
|
|
14
|
+
try {
|
|
15
|
+
const formStatus = Form.Item?.useStatus?.();
|
|
16
|
+
hasValidationError = showValidationIcon && formStatus?.status === 'error';
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
// useStatus může být nedostupný mimo Form.Item kontext
|
|
20
|
+
hasValidationError = false;
|
|
21
|
+
}
|
|
10
22
|
// Použij buď input prop nebo children
|
|
11
23
|
const content = input || children;
|
|
12
24
|
// Předej Form.Item props do children bez cloneElement
|
|
@@ -20,7 +32,7 @@ value, onChange, disabled, ...restProps }) => {
|
|
|
20
32
|
...restProps,
|
|
21
33
|
})
|
|
22
34
|
: content;
|
|
23
|
-
return (_jsx(ListItem, { title: title, subtitle: subtitle, footer: footer, className: `detail-item no-ripple no-fastclick ${className}`, style: { ...style, pointerEvents: 'none' }, noChevron: true, link: false, after: enhancedContent && (
|
|
35
|
+
return (_jsx(ListItem, { title: title, subtitle: subtitle, footer: footer, className: `detail-item no-ripple no-fastclick ${className} ${hasValidationError ? 'has-validation-error' : ''}`, style: { ...style, pointerEvents: 'none' }, noChevron: true, link: false, after: enhancedContent && (_jsxs("div", { className: "item-after", style: { pointerEvents: 'auto', display: 'flex', alignItems: 'center', gap: '8px' }, children: [hasValidationError && (_jsx("div", { className: "validation-icon", children: _jsx(CircleAlert, { size: 18, color: "#DC2626" }) })), enhancedContent] })) }));
|
|
24
36
|
};
|
|
25
37
|
// Export všech komponent
|
|
26
38
|
export default DetailItem;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,6BAA6B,CAAC;AACnD,OAAO,aAAa,CAAC;AAErB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,QAAQ,MAAM,6BAA6B,CAAC;AACnD,OAAO,aAAa,CAAC;AAErB,oFAAoF;AACpF,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,KAAK,EACL,kBAAkB,GAAG,KAAK,EAAE,yCAAyC;AACrE,qDAAqD;AACrD,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,EAAE;IACH,kDAAkD;IAClD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;QAC5C,kBAAkB,GAAG,kBAAkB,IAAI,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uDAAuD;QACvD,kBAAkB,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC;IAElC,sDAAsD;IACtD,MAAM,eAAe,GACnB,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QACtC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE;YAChC,GAAG,OAAO,CAAC,KAAK;YAChB,yBAAyB;YACzB,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC;YACrC,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC7B,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC3C,GAAG,SAAS;SACb,CAAC;QACJ,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO,CACL,KAAC,QAAQ,IACP,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,sCAAsC,SAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE,EAChH,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,EAC1C,SAAS,EAAE,IAAI,EACf,IAAI,EAAE,KAAK,EACX,KAAK,EACH,eAAe,IAAI,CACjB,eAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,aAC5G,kBAAkB,IAAI,CACrB,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,SAAS,GAAG,GACrC,CACP,EACA,eAAe,IACZ,CACP,GAEH,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,yBAAyB;AACzB,eAAe,UAAU,CAAC;AAC1B,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,WAAW,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/style.css
CHANGED
|
@@ -59,4 +59,55 @@
|
|
|
59
59
|
/* Content animation */
|
|
60
60
|
.f7-parallax .page-content {
|
|
61
61
|
animation: slideUpFadeIn 0.5s ease-out 0.1s both;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* Validační ikona styly */
|
|
65
|
+
.validation-icon {
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
animation: validationPulse 0.3s ease-out;
|
|
70
|
+
flex-shrink: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.validation-icon svg {
|
|
74
|
+
color: #DC2626 !important; /* Červená barva ikony */
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Animace pro smooth zobrazení validační ikony */
|
|
78
|
+
@keyframes validationPulse {
|
|
79
|
+
0% {
|
|
80
|
+
opacity: 0;
|
|
81
|
+
transform: scale(0.8);
|
|
82
|
+
}
|
|
83
|
+
50% {
|
|
84
|
+
transform: scale(1.1);
|
|
85
|
+
}
|
|
86
|
+
100% {
|
|
87
|
+
opacity: 1;
|
|
88
|
+
transform: scale(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* Dodatečné styly pro DetailItem s chybou */
|
|
93
|
+
.detail-item.has-validation-error {
|
|
94
|
+
border-left: 3px solid #DC2626;
|
|
95
|
+
background-color: #FEFEFE;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.detail-item.has-validation-error .item-title {
|
|
99
|
+
color: #DC2626;
|
|
100
|
+
font-weight: 600;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Skrytí validačních chyb pro DetailItem s validační ikonou */
|
|
104
|
+
.detail-item.has-validation-error + .ant-form-item-explain,
|
|
105
|
+
.detail-item.has-validation-error + .ant-form-item-extra {
|
|
106
|
+
display: none !important;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Alternativní způsob - skrytí přes parent Form.Item */
|
|
110
|
+
.ant-form-item:has(.detail-item.has-validation-error) .ant-form-item-explain,
|
|
111
|
+
.ant-form-item:has(.detail-item.has-validation-error) .ant-form-item-extra {
|
|
112
|
+
display: none !important;
|
|
62
113
|
}
|
package/index.jsx
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { Form } from '@bit.rhplus/ui.form';
|
|
4
|
+
import { CircleAlert } from 'lucide-react';
|
|
3
5
|
import ListItem from '@bit.rhplus/ui.f7.list-item';
|
|
4
6
|
import './style.css';
|
|
5
7
|
|
|
6
|
-
// Základní DetailItem komponenta s podporou Ant Design Form props
|
|
8
|
+
// Základní DetailItem komponenta s podporou Ant Design Form props a validační ikony
|
|
7
9
|
const DetailItem = ({
|
|
8
10
|
title,
|
|
9
11
|
subtitle,
|
|
@@ -12,12 +14,23 @@ const DetailItem = ({
|
|
|
12
14
|
children,
|
|
13
15
|
className = '',
|
|
14
16
|
style,
|
|
17
|
+
showValidationIcon = false, // Nový prop pro aktivaci validační ikony
|
|
15
18
|
// Ant Design Form props pro předání input komponentě
|
|
16
19
|
value,
|
|
17
20
|
onChange,
|
|
18
21
|
disabled,
|
|
19
22
|
...restProps
|
|
20
23
|
}) => {
|
|
24
|
+
// Získání validačního stavu pomocí useStatus hook
|
|
25
|
+
let hasValidationError = false;
|
|
26
|
+
try {
|
|
27
|
+
const formStatus = Form.Item?.useStatus?.();
|
|
28
|
+
hasValidationError = showValidationIcon && formStatus?.status === 'error';
|
|
29
|
+
} catch (error) {
|
|
30
|
+
// useStatus může být nedostupný mimo Form.Item kontext
|
|
31
|
+
hasValidationError = false;
|
|
32
|
+
}
|
|
33
|
+
|
|
21
34
|
// Použij buď input prop nebo children
|
|
22
35
|
const content = input || children;
|
|
23
36
|
|
|
@@ -39,13 +52,18 @@ const DetailItem = ({
|
|
|
39
52
|
title={title}
|
|
40
53
|
subtitle={subtitle}
|
|
41
54
|
footer={footer}
|
|
42
|
-
className={`detail-item no-ripple no-fastclick ${className}`}
|
|
55
|
+
className={`detail-item no-ripple no-fastclick ${className} ${hasValidationError ? 'has-validation-error' : ''}`}
|
|
43
56
|
style={{ ...style, pointerEvents: 'none' }}
|
|
44
57
|
noChevron={true}
|
|
45
58
|
link={false}
|
|
46
59
|
after={
|
|
47
60
|
enhancedContent && (
|
|
48
|
-
<div className="item-after" style={{ pointerEvents: 'auto' }}>
|
|
61
|
+
<div className="item-after" style={{ pointerEvents: 'auto', display: 'flex', alignItems: 'center', gap: '8px' }}>
|
|
62
|
+
{hasValidationError && (
|
|
63
|
+
<div className="validation-icon">
|
|
64
|
+
<CircleAlert size={18} color="#DC2626" />
|
|
65
|
+
</div>
|
|
66
|
+
)}
|
|
49
67
|
{enhancedContent}
|
|
50
68
|
</div>
|
|
51
69
|
)
|
package/package.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bit.rhplus/ui.f7.detail-item",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"homepage": "https://bit.cloud/remote-scope/ui/f7/detail-item",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "remote-scope",
|
|
8
8
|
"name": "ui/f7/detail-item",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.5"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"lucide-react": "^0.503.0",
|
|
13
13
|
"@bit.rhplus/ui.f7.list-item": "0.0.7",
|
|
14
|
+
"@bit.rhplus/ui.form": "0.1.8",
|
|
14
15
|
"@bit.rhplus/ui.circle-button": "0.0.9",
|
|
15
|
-
"@bit.rhplus/ui.f7.save-button": "0.0.
|
|
16
|
+
"@bit.rhplus/ui.f7.save-button": "0.0.3",
|
|
16
17
|
"@bit.rhplus/ui.grid": "0.0.42"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
package/style.css
CHANGED
|
@@ -59,4 +59,55 @@
|
|
|
59
59
|
/* Content animation */
|
|
60
60
|
.f7-parallax .page-content {
|
|
61
61
|
animation: slideUpFadeIn 0.5s ease-out 0.1s both;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* Validační ikona styly */
|
|
65
|
+
.validation-icon {
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
animation: validationPulse 0.3s ease-out;
|
|
70
|
+
flex-shrink: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.validation-icon svg {
|
|
74
|
+
color: #DC2626 !important; /* Červená barva ikony */
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Animace pro smooth zobrazení validační ikony */
|
|
78
|
+
@keyframes validationPulse {
|
|
79
|
+
0% {
|
|
80
|
+
opacity: 0;
|
|
81
|
+
transform: scale(0.8);
|
|
82
|
+
}
|
|
83
|
+
50% {
|
|
84
|
+
transform: scale(1.1);
|
|
85
|
+
}
|
|
86
|
+
100% {
|
|
87
|
+
opacity: 1;
|
|
88
|
+
transform: scale(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* Dodatečné styly pro DetailItem s chybou */
|
|
93
|
+
.detail-item.has-validation-error {
|
|
94
|
+
border-left: 3px solid #DC2626;
|
|
95
|
+
background-color: #FEFEFE;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.detail-item.has-validation-error .item-title {
|
|
99
|
+
color: #DC2626;
|
|
100
|
+
font-weight: 600;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Skrytí validačních chyb pro DetailItem s validační ikonou */
|
|
104
|
+
.detail-item.has-validation-error + .ant-form-item-explain,
|
|
105
|
+
.detail-item.has-validation-error + .ant-form-item-extra {
|
|
106
|
+
display: none !important;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Alternativní způsob - skrytí přes parent Form.Item */
|
|
110
|
+
.ant-form-item:has(.detail-item.has-validation-error) .ant-form-item-explain,
|
|
111
|
+
.ant-form-item:has(.detail-item.has-validation-error) .ant-form-item-extra {
|
|
112
|
+
display: none !important;
|
|
62
113
|
}
|
|
File without changes
|