@bit.rhplus/ui2.ai-button 0.0.1

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.
@@ -0,0 +1,17 @@
1
+ export default AIButton;
2
+ /**
3
+ * AI Rainbow Button - Moderní tlačítko s rotujícím duhovým prstencem
4
+ *
5
+ * @param {Object} props
6
+ * @param {string} [props.label='AI'] - Text zobrazený na tlačítku
7
+ * @param {Function} [props.onClick] - Handler pro kliknutí
8
+ * @param {string|number} [props.size='110px'] - Velikost tlačítka
9
+ * @param {string|number} [props.ring='10px'] - Tloušťka duhového prstence
10
+ * @param {string} [props.className] - Dodatečné CSS třídy
11
+ * @param {string} [props.ariaLabel] - Aria label pro accessibility (výchozí je hodnota label)
12
+ * @param {string} [props.type='button'] - Typ tlačítka
13
+ * @param {Object} [props.style] - Inline styly pro tlačítko
14
+ * @param {boolean} [props.disabled=false] - Zakázat tlačítko
15
+ */
16
+ declare const AIButton: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
17
+ import React from 'react';
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import classnames from 'classnames';
4
+ import './style.css';
5
+ /**
6
+ * AI Rainbow Button - Moderní tlačítko s rotujícím duhovým prstencem
7
+ *
8
+ * @param {Object} props
9
+ * @param {string} [props.label='AI'] - Text zobrazený na tlačítku
10
+ * @param {Function} [props.onClick] - Handler pro kliknutí
11
+ * @param {string|number} [props.size='110px'] - Velikost tlačítka
12
+ * @param {string|number} [props.ring='10px'] - Tloušťka duhového prstence
13
+ * @param {string} [props.className] - Dodatečné CSS třídy
14
+ * @param {string} [props.ariaLabel] - Aria label pro accessibility (výchozí je hodnota label)
15
+ * @param {string} [props.type='button'] - Typ tlačítka
16
+ * @param {Object} [props.style] - Inline styly pro tlačítko
17
+ * @param {boolean} [props.disabled=false] - Zakázat tlačítko
18
+ */
19
+ const AIButton = React.forwardRef((props, ref) => {
20
+ const { label = 'AI', onClick, size = '110px', ring = '10px', className, ariaLabel, type = 'button', style, disabled = false, ...restProps } = props;
21
+ // Inline CSS proměnné pro customizaci
22
+ const buttonStyle = {
23
+ '--size': typeof size === 'number' ? `${size}px` : size,
24
+ '--ring': typeof ring === 'number' ? `${ring}px` : ring,
25
+ ...style,
26
+ };
27
+ return (_jsx("button", { ref: ref, className: classnames('ai-btn', className), type: type, "aria-label": ariaLabel || label, onClick: onClick, style: buttonStyle, disabled: disabled, ...restProps, children: _jsx("div", { className: "ai-inner", children: _jsx("div", { className: "ai-label", children: label }) }) }));
28
+ });
29
+ AIButton.displayName = 'AIButton';
30
+ export default AIButton;
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,aAAa,CAAC;AAErB;;;;;;;;;;;;;GAaG;AACH,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC/C,MAAM,EACJ,KAAK,GAAG,IAAI,EACZ,OAAO,EACP,IAAI,GAAG,OAAO,EACd,IAAI,GAAG,MAAM,EACb,SAAS,EACT,SAAS,EACT,IAAI,GAAG,QAAQ,EACf,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,sCAAsC;IACtC,MAAM,WAAW,GAAG;QAClB,QAAQ,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QACvD,QAAQ,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QACvD,GAAG,KAAK;KACT,CAAC;IAEF,OAAO,CACL,iBACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC1C,IAAI,EAAE,IAAI,gBACE,SAAS,IAAI,KAAK,EAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,QAAQ,KACd,SAAS,YAEb,cAAK,SAAS,EAAC,UAAU,YACvB,cAAK,SAAS,EAAC,UAAU,YAAE,KAAK,GAAO,GACnC,GACC,CACV,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAElC,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,7 @@
1
+ ;
2
+ ;
3
+
4
+ export const compositions = [];
5
+ export const overview = [];
6
+
7
+ export const compositions_metadata = {"compositions":[]};
package/dist/style.css ADDED
@@ -0,0 +1,172 @@
1
+ /* AI Rainbow Button - Duhové tlačítko s rotujícím prstencem */
2
+
3
+ .ai-btn {
4
+ /* CSS proměnné - lze přepsat pomocí inline style */
5
+ --size: 110px;
6
+ --ring: 10px;
7
+ --bg: #ffffff;
8
+ --text: rgba(20, 20, 20, 0.92);
9
+
10
+ position: relative;
11
+ width: var(--size);
12
+ height: var(--size);
13
+ border: 0;
14
+ border-radius: 999px;
15
+ cursor: pointer;
16
+ background: transparent;
17
+ padding: 0;
18
+ outline: none;
19
+ -webkit-tap-highlight-color: transparent;
20
+ transform: translateZ(0);
21
+ transition: transform 0.15s ease;
22
+ }
23
+
24
+ .ai-btn:disabled {
25
+ cursor: not-allowed;
26
+ opacity: 0.5;
27
+ }
28
+
29
+ /* Duhový rotující prstenec */
30
+ .ai-btn::before {
31
+ content: '';
32
+ position: absolute;
33
+ inset: 0;
34
+ border-radius: inherit;
35
+
36
+ /* Duhový conic gradient */
37
+ background: conic-gradient(
38
+ from 0deg,
39
+ #ff004c,
40
+ #ff8a00,
41
+ #ffe600,
42
+ #35ff7a,
43
+ #00d4ff,
44
+ #6a5cff,
45
+ #ff4fd8,
46
+ #ff004c
47
+ );
48
+
49
+ /* Vyříznutí vnitřku => prstenec */
50
+ -webkit-mask: radial-gradient(
51
+ closest-side,
52
+ transparent calc(100% - var(--ring)),
53
+ #000 calc(100% - var(--ring) + 1px)
54
+ );
55
+ mask: radial-gradient(
56
+ closest-side,
57
+ transparent calc(100% - var(--ring)),
58
+ #000 calc(100% - var(--ring) + 1px)
59
+ );
60
+
61
+ /* Animace "točení" barev */
62
+ animation: ai-btn-spin 3.2s linear infinite;
63
+ filter: saturate(1.15) brightness(1.05);
64
+ }
65
+
66
+ .ai-btn:disabled::before {
67
+ animation: none;
68
+ filter: saturate(0.5) brightness(0.8);
69
+ }
70
+
71
+ /* Glow aura kolem tlačítka */
72
+ .ai-btn::after {
73
+ content: '';
74
+ position: absolute;
75
+ inset: -18px;
76
+ border-radius: inherit;
77
+ background: conic-gradient(
78
+ from 0deg,
79
+ #ff004c,
80
+ #ff8a00,
81
+ #ffe600,
82
+ #35ff7a,
83
+ #00d4ff,
84
+ #6a5cff,
85
+ #ff4fd8,
86
+ #ff004c
87
+ );
88
+ opacity: 0.35;
89
+ filter: blur(22px);
90
+ animation: ai-btn-spin 3.2s linear infinite, ai-btn-breathe 2.6s ease-in-out infinite;
91
+ transform: translateZ(0);
92
+ pointer-events: none;
93
+ }
94
+
95
+ .ai-btn:disabled::after {
96
+ animation: none;
97
+ opacity: 0.15;
98
+ }
99
+
100
+ /* Vnitřek tlačítka */
101
+ .ai-inner {
102
+ position: absolute;
103
+ inset: var(--ring);
104
+ border-radius: inherit;
105
+ background: radial-gradient(
106
+ 120% 120% at 30% 20%,
107
+ rgba(255, 255, 255, 1) 0%,
108
+ rgba(250, 250, 250, 1) 40%,
109
+ rgba(240, 242, 245, 1) 80%,
110
+ rgba(235, 237, 240, 1) 100%
111
+ );
112
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.08),
113
+ inset 0 0 0 1px rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.12);
114
+ display: grid;
115
+ place-items: center;
116
+ user-select: none;
117
+ }
118
+
119
+ .ai-label {
120
+ font-weight: 700;
121
+ letter-spacing: 0.08em;
122
+ font-size: 14px;
123
+ text-transform: uppercase;
124
+ color: var(--text);
125
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
126
+ }
127
+
128
+ /* Hover efekt */
129
+ .ai-btn:hover:not(:disabled) {
130
+ transform: translateZ(0) scale(1.03);
131
+ }
132
+
133
+ /* Active (stisknuté) */
134
+ .ai-btn:active:not(:disabled) {
135
+ transform: translateZ(0) scale(0.98);
136
+ }
137
+
138
+ /* Focus - accessibility */
139
+ .ai-btn:focus-visible .ai-inner {
140
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12),
141
+ inset 0 -10px 30px rgba(0, 0, 0, 0.55), 0 10px 30px rgba(0, 0, 0, 0.35),
142
+ 0 0 0 3px rgba(255, 255, 255, 0.16);
143
+ }
144
+
145
+ /* Animace - rotace */
146
+ @keyframes ai-btn-spin {
147
+ to {
148
+ transform: rotate(360deg);
149
+ }
150
+ }
151
+
152
+ /* Animace - dýchání (breathe) */
153
+ @keyframes ai-btn-breathe {
154
+ 0%,
155
+ 100% {
156
+ opacity: 0.28;
157
+ }
158
+ 50% {
159
+ opacity: 0.46;
160
+ }
161
+ }
162
+
163
+ /* Respektovat uživatelské preference pro redukci pohybu */
164
+ @media (prefers-reduced-motion: reduce) {
165
+ .ai-btn::before,
166
+ .ai-btn::after {
167
+ animation: none;
168
+ }
169
+ .ai-btn {
170
+ transition: none;
171
+ }
172
+ }
package/index.jsx ADDED
@@ -0,0 +1,60 @@
1
+ import React from 'react';
2
+ import classnames from 'classnames';
3
+ import './style.css';
4
+
5
+ /**
6
+ * AI Rainbow Button - Moderní tlačítko s rotujícím duhovým prstencem
7
+ *
8
+ * @param {Object} props
9
+ * @param {string} [props.label='AI'] - Text zobrazený na tlačítku
10
+ * @param {Function} [props.onClick] - Handler pro kliknutí
11
+ * @param {string|number} [props.size='110px'] - Velikost tlačítka
12
+ * @param {string|number} [props.ring='10px'] - Tloušťka duhového prstence
13
+ * @param {string} [props.className] - Dodatečné CSS třídy
14
+ * @param {string} [props.ariaLabel] - Aria label pro accessibility (výchozí je hodnota label)
15
+ * @param {string} [props.type='button'] - Typ tlačítka
16
+ * @param {Object} [props.style] - Inline styly pro tlačítko
17
+ * @param {boolean} [props.disabled=false] - Zakázat tlačítko
18
+ */
19
+ const AIButton = React.forwardRef((props, ref) => {
20
+ const {
21
+ label = 'AI',
22
+ onClick,
23
+ size = '110px',
24
+ ring = '10px',
25
+ className,
26
+ ariaLabel,
27
+ type = 'button',
28
+ style,
29
+ disabled = false,
30
+ ...restProps
31
+ } = props;
32
+
33
+ // Inline CSS proměnné pro customizaci
34
+ const buttonStyle = {
35
+ '--size': typeof size === 'number' ? `${size}px` : size,
36
+ '--ring': typeof ring === 'number' ? `${ring}px` : ring,
37
+ ...style,
38
+ };
39
+
40
+ return (
41
+ <button
42
+ ref={ref}
43
+ className={classnames('ai-btn', className)}
44
+ type={type}
45
+ aria-label={ariaLabel || label}
46
+ onClick={onClick}
47
+ style={buttonStyle}
48
+ disabled={disabled}
49
+ {...restProps}
50
+ >
51
+ <div className="ai-inner">
52
+ <div className="ai-label">{label}</div>
53
+ </div>
54
+ </button>
55
+ );
56
+ });
57
+
58
+ AIButton.displayName = 'AIButton';
59
+
60
+ export default AIButton;
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@bit.rhplus/ui2.ai-button",
3
+ "version": "0.0.1",
4
+ "main": "dist/index.js",
5
+ "componentId": {
6
+ "name": "ui2/ai-button",
7
+ "version": "0.0.1",
8
+ "scope": "remote-scope"
9
+ },
10
+ "dependencies": {
11
+ "classnames": "^2.5.1"
12
+ },
13
+ "devDependencies": {
14
+ "@teambit/react.react-env": "1.0.132"
15
+ },
16
+ "peerDependencies": {
17
+ "react": "^17.0.0 || ^18.0.0"
18
+ },
19
+ "license": "SEE LICENSE IN UNLICENSED",
20
+ "optionalDependencies": {},
21
+ "peerDependenciesMeta": {},
22
+ "private": false,
23
+ "publishConfig": {
24
+ "scope": "@bit.rhplus",
25
+ "registry": "https://registry.npmjs.org/"
26
+ }
27
+ }
package/style.css ADDED
@@ -0,0 +1,172 @@
1
+ /* AI Rainbow Button - Duhové tlačítko s rotujícím prstencem */
2
+
3
+ .ai-btn {
4
+ /* CSS proměnné - lze přepsat pomocí inline style */
5
+ --size: 110px;
6
+ --ring: 10px;
7
+ --bg: #ffffff;
8
+ --text: rgba(20, 20, 20, 0.92);
9
+
10
+ position: relative;
11
+ width: var(--size);
12
+ height: var(--size);
13
+ border: 0;
14
+ border-radius: 999px;
15
+ cursor: pointer;
16
+ background: transparent;
17
+ padding: 0;
18
+ outline: none;
19
+ -webkit-tap-highlight-color: transparent;
20
+ transform: translateZ(0);
21
+ transition: transform 0.15s ease;
22
+ }
23
+
24
+ .ai-btn:disabled {
25
+ cursor: not-allowed;
26
+ opacity: 0.5;
27
+ }
28
+
29
+ /* Duhový rotující prstenec */
30
+ .ai-btn::before {
31
+ content: '';
32
+ position: absolute;
33
+ inset: 0;
34
+ border-radius: inherit;
35
+
36
+ /* Duhový conic gradient */
37
+ background: conic-gradient(
38
+ from 0deg,
39
+ #ff004c,
40
+ #ff8a00,
41
+ #ffe600,
42
+ #35ff7a,
43
+ #00d4ff,
44
+ #6a5cff,
45
+ #ff4fd8,
46
+ #ff004c
47
+ );
48
+
49
+ /* Vyříznutí vnitřku => prstenec */
50
+ -webkit-mask: radial-gradient(
51
+ closest-side,
52
+ transparent calc(100% - var(--ring)),
53
+ #000 calc(100% - var(--ring) + 1px)
54
+ );
55
+ mask: radial-gradient(
56
+ closest-side,
57
+ transparent calc(100% - var(--ring)),
58
+ #000 calc(100% - var(--ring) + 1px)
59
+ );
60
+
61
+ /* Animace "točení" barev */
62
+ animation: ai-btn-spin 3.2s linear infinite;
63
+ filter: saturate(1.15) brightness(1.05);
64
+ }
65
+
66
+ .ai-btn:disabled::before {
67
+ animation: none;
68
+ filter: saturate(0.5) brightness(0.8);
69
+ }
70
+
71
+ /* Glow aura kolem tlačítka */
72
+ .ai-btn::after {
73
+ content: '';
74
+ position: absolute;
75
+ inset: -18px;
76
+ border-radius: inherit;
77
+ background: conic-gradient(
78
+ from 0deg,
79
+ #ff004c,
80
+ #ff8a00,
81
+ #ffe600,
82
+ #35ff7a,
83
+ #00d4ff,
84
+ #6a5cff,
85
+ #ff4fd8,
86
+ #ff004c
87
+ );
88
+ opacity: 0.35;
89
+ filter: blur(22px);
90
+ animation: ai-btn-spin 3.2s linear infinite, ai-btn-breathe 2.6s ease-in-out infinite;
91
+ transform: translateZ(0);
92
+ pointer-events: none;
93
+ }
94
+
95
+ .ai-btn:disabled::after {
96
+ animation: none;
97
+ opacity: 0.15;
98
+ }
99
+
100
+ /* Vnitřek tlačítka */
101
+ .ai-inner {
102
+ position: absolute;
103
+ inset: var(--ring);
104
+ border-radius: inherit;
105
+ background: radial-gradient(
106
+ 120% 120% at 30% 20%,
107
+ rgba(255, 255, 255, 1) 0%,
108
+ rgba(250, 250, 250, 1) 40%,
109
+ rgba(240, 242, 245, 1) 80%,
110
+ rgba(235, 237, 240, 1) 100%
111
+ );
112
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.08),
113
+ inset 0 0 0 1px rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.12);
114
+ display: grid;
115
+ place-items: center;
116
+ user-select: none;
117
+ }
118
+
119
+ .ai-label {
120
+ font-weight: 700;
121
+ letter-spacing: 0.08em;
122
+ font-size: 14px;
123
+ text-transform: uppercase;
124
+ color: var(--text);
125
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
126
+ }
127
+
128
+ /* Hover efekt */
129
+ .ai-btn:hover:not(:disabled) {
130
+ transform: translateZ(0) scale(1.03);
131
+ }
132
+
133
+ /* Active (stisknuté) */
134
+ .ai-btn:active:not(:disabled) {
135
+ transform: translateZ(0) scale(0.98);
136
+ }
137
+
138
+ /* Focus - accessibility */
139
+ .ai-btn:focus-visible .ai-inner {
140
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12),
141
+ inset 0 -10px 30px rgba(0, 0, 0, 0.55), 0 10px 30px rgba(0, 0, 0, 0.35),
142
+ 0 0 0 3px rgba(255, 255, 255, 0.16);
143
+ }
144
+
145
+ /* Animace - rotace */
146
+ @keyframes ai-btn-spin {
147
+ to {
148
+ transform: rotate(360deg);
149
+ }
150
+ }
151
+
152
+ /* Animace - dýchání (breathe) */
153
+ @keyframes ai-btn-breathe {
154
+ 0%,
155
+ 100% {
156
+ opacity: 0.28;
157
+ }
158
+ 50% {
159
+ opacity: 0.46;
160
+ }
161
+ }
162
+
163
+ /* Respektovat uživatelské preference pro redukci pohybu */
164
+ @media (prefers-reduced-motion: reduce) {
165
+ .ai-btn::before,
166
+ .ai-btn::after {
167
+ animation: none;
168
+ }
169
+ .ai-btn {
170
+ transition: none;
171
+ }
172
+ }
@@ -0,0 +1,43 @@
1
+ declare module '*.png' {
2
+ const value: any;
3
+ export = value;
4
+ }
5
+ declare module '*.svg' {
6
+ import type { FunctionComponent, SVGProps } from 'react';
7
+
8
+ export const ReactComponent: FunctionComponent<
9
+ SVGProps<SVGSVGElement> & { title?: string }
10
+ >;
11
+ const src: string;
12
+ export default src;
13
+ }
14
+
15
+ // @TODO Gilad
16
+ declare module '*.jpg' {
17
+ const value: any;
18
+ export = value;
19
+ }
20
+ declare module '*.jpeg' {
21
+ const value: any;
22
+ export = value;
23
+ }
24
+ declare module '*.gif' {
25
+ const value: any;
26
+ export = value;
27
+ }
28
+ declare module '*.bmp' {
29
+ const value: any;
30
+ export = value;
31
+ }
32
+ declare module '*.otf' {
33
+ const value: any;
34
+ export = value;
35
+ }
36
+ declare module '*.woff' {
37
+ const value: any;
38
+ export = value;
39
+ }
40
+ declare module '*.woff2' {
41
+ const value: any;
42
+ export = value;
43
+ }
@@ -0,0 +1,42 @@
1
+ declare module '*.module.css' {
2
+ const classes: { readonly [key: string]: string };
3
+ export default classes;
4
+ }
5
+ declare module '*.module.scss' {
6
+ const classes: { readonly [key: string]: string };
7
+ export default classes;
8
+ }
9
+ declare module '*.module.sass' {
10
+ const classes: { readonly [key: string]: string };
11
+ export default classes;
12
+ }
13
+
14
+ declare module '*.module.less' {
15
+ const classes: { readonly [key: string]: string };
16
+ export default classes;
17
+ }
18
+
19
+ declare module '*.less' {
20
+ const classes: { readonly [key: string]: string };
21
+ export default classes;
22
+ }
23
+
24
+ declare module '*.css' {
25
+ const classes: { readonly [key: string]: string };
26
+ export default classes;
27
+ }
28
+
29
+ declare module '*.sass' {
30
+ const classes: { readonly [key: string]: string };
31
+ export default classes;
32
+ }
33
+
34
+ declare module '*.scss' {
35
+ const classes: { readonly [key: string]: string };
36
+ export default classes;
37
+ }
38
+
39
+ declare module '*.mdx' {
40
+ const component: any;
41
+ export default component;
42
+ }