@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 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 && (_jsx("div", { className: "item-after", style: { pointerEvents: 'auto' }, children: 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,kEAAkE;AAClE,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,KAAK;AACL,qDAAqD;AACrD,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,EAAE;IACH,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,EAAE,EAC5D,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,EAC1C,SAAS,EAAE,IAAI,EACf,IAAI,EAAE,KAAK,EACX,KAAK,EACH,eAAe,IAAI,CACjB,cAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,YACzD,eAAe,GACZ,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"}
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.4",
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.4"
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.2",
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
  }