cronixui 1.0.6 → 1.1.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.
Files changed (169) hide show
  1. package/README.md +20 -5
  2. package/package.json +20 -5
  3. package/packages/flutter/lib/cronixui.dart +41 -0
  4. package/packages/flutter/lib/src/tokens/colors.dart +34 -0
  5. package/packages/flutter/lib/src/tokens/spacing.dart +54 -0
  6. package/packages/flutter/lib/src/tokens/theme.dart +174 -0
  7. package/packages/flutter/lib/src/widgets/cn_accordion.dart +254 -0
  8. package/packages/flutter/lib/src/widgets/cn_alert.dart +137 -0
  9. package/packages/flutter/lib/src/widgets/cn_avatar.dart +98 -0
  10. package/packages/flutter/lib/src/widgets/cn_badge.dart +80 -0
  11. package/packages/flutter/lib/src/widgets/cn_breadcrumb.dart +88 -0
  12. package/packages/flutter/lib/src/widgets/cn_button.dart +137 -0
  13. package/packages/flutter/lib/src/widgets/cn_card.dart +99 -0
  14. package/packages/flutter/lib/src/widgets/cn_checkbox.dart +77 -0
  15. package/packages/flutter/lib/src/widgets/cn_command_palette.dart +299 -0
  16. package/packages/flutter/lib/src/widgets/cn_container.dart +131 -0
  17. package/packages/flutter/lib/src/widgets/cn_dropdown.dart +149 -0
  18. package/packages/flutter/lib/src/widgets/cn_file_input.dart +113 -0
  19. package/packages/flutter/lib/src/widgets/cn_footer.dart +108 -0
  20. package/packages/flutter/lib/src/widgets/cn_header.dart +173 -0
  21. package/packages/flutter/lib/src/widgets/cn_input.dart +142 -0
  22. package/packages/flutter/lib/src/widgets/cn_list.dart +150 -0
  23. package/packages/flutter/lib/src/widgets/cn_modal.dart +213 -0
  24. package/packages/flutter/lib/src/widgets/cn_nav.dart +157 -0
  25. package/packages/flutter/lib/src/widgets/cn_pagination.dart +193 -0
  26. package/packages/flutter/lib/src/widgets/cn_progress.dart +146 -0
  27. package/packages/flutter/lib/src/widgets/cn_radio.dart +133 -0
  28. package/packages/flutter/lib/src/widgets/cn_search.dart +183 -0
  29. package/packages/flutter/lib/src/widgets/cn_select.dart +244 -0
  30. package/packages/flutter/lib/src/widgets/cn_sidebar.dart +207 -0
  31. package/packages/flutter/lib/src/widgets/cn_skeleton.dart +136 -0
  32. package/packages/flutter/lib/src/widgets/cn_slider.dart +141 -0
  33. package/packages/flutter/lib/src/widgets/cn_spinner.dart +85 -0
  34. package/packages/flutter/lib/src/widgets/cn_stat.dart +135 -0
  35. package/packages/flutter/lib/src/widgets/cn_table.dart +136 -0
  36. package/packages/flutter/lib/src/widgets/cn_tabs.dart +229 -0
  37. package/packages/flutter/lib/src/widgets/cn_tag.dart +185 -0
  38. package/packages/flutter/lib/src/widgets/cn_textarea.dart +143 -0
  39. package/packages/flutter/lib/src/widgets/cn_toast.dart +121 -0
  40. package/packages/flutter/lib/src/widgets/cn_toggle.dart +78 -0
  41. package/packages/flutter/lib/src/widgets/cn_tooltip.dart +118 -0
  42. package/packages/flutter/pubspec.yaml +20 -0
  43. package/packages/go/cronixui/cronixui.go +784 -237
  44. package/packages/go/cronixui/go.mod +32 -0
  45. package/packages/go/cronixui/go.sum +666 -0
  46. package/packages/python/cronixui/__init__.py +59 -3
  47. package/packages/python/cronixui/alert.py +61 -0
  48. package/packages/python/cronixui/avatar.py +50 -0
  49. package/packages/python/cronixui/badge.py +46 -0
  50. package/packages/python/cronixui/button.py +64 -0
  51. package/packages/python/cronixui/card.py +62 -0
  52. package/packages/python/cronixui/form.py +255 -0
  53. package/packages/python/cronixui/layout.py +143 -0
  54. package/packages/python/cronixui/list.py +51 -0
  55. package/packages/python/cronixui/loading.py +36 -0
  56. package/packages/python/cronixui/progress.py +90 -0
  57. package/packages/python/cronixui/table.py +48 -0
  58. package/packages/python/cronixui/tooltip.py +28 -0
  59. package/packages/react/src/components/Accordion.tsx +82 -0
  60. package/packages/react/src/components/Alert.tsx +80 -0
  61. package/packages/react/src/components/Avatar.tsx +54 -0
  62. package/packages/react/src/components/Badge.tsx +32 -0
  63. package/packages/react/src/components/Breadcrumb.tsx +50 -0
  64. package/packages/react/src/components/Button.tsx +47 -0
  65. package/packages/react/src/components/Card.tsx +69 -0
  66. package/packages/react/src/components/Checkbox.tsx +30 -0
  67. package/packages/react/src/components/CommandPalette.tsx +131 -0
  68. package/packages/react/src/components/Container.tsx +26 -0
  69. package/packages/react/src/components/Dropdown.tsx +88 -0
  70. package/packages/react/src/components/FileInput.tsx +86 -0
  71. package/packages/react/src/components/Footer.tsx +36 -0
  72. package/packages/react/src/components/FormGroup.tsx +36 -0
  73. package/packages/react/src/components/Header.tsx +29 -0
  74. package/packages/react/src/components/Input.tsx +54 -0
  75. package/packages/react/src/components/List.tsx +55 -0
  76. package/packages/react/src/components/Modal.tsx +89 -0
  77. package/packages/react/src/components/Nav.tsx +63 -0
  78. package/packages/react/src/components/Pagination.tsx +107 -0
  79. package/packages/react/src/components/Progress.tsx +49 -0
  80. package/packages/react/src/components/Radio.tsx +64 -0
  81. package/packages/react/src/components/Search.tsx +95 -0
  82. package/packages/react/src/components/Select.tsx +41 -0
  83. package/packages/react/src/components/Sidebar.tsx +64 -0
  84. package/packages/react/src/components/Skeleton.tsx +39 -0
  85. package/packages/react/src/components/Slider.tsx +32 -0
  86. package/packages/react/src/components/Spinner.tsx +24 -0
  87. package/packages/react/src/components/Stack.tsx +69 -0
  88. package/packages/react/src/components/Stat.tsx +35 -0
  89. package/packages/react/src/components/Table.tsx +90 -0
  90. package/packages/react/src/components/Tabs.tsx +85 -0
  91. package/packages/react/src/components/Tag.tsx +30 -0
  92. package/packages/react/src/components/Textarea.tsx +21 -0
  93. package/packages/react/src/components/Toast.tsx +134 -0
  94. package/packages/react/src/components/Toggle.tsx +58 -0
  95. package/packages/react/src/components/Tooltip.tsx +31 -0
  96. package/packages/react/src/components/Typography.tsx +66 -0
  97. package/packages/react/src/index.ts +40 -0
  98. package/packages/react/src/styles.css +2039 -0
  99. package/packages/react/src/tokens/index.ts +94 -0
  100. package/packages/rust/cronixui/src/colors.rs +135 -0
  101. package/packages/rust/cronixui/src/components/accordion.rs +47 -0
  102. package/packages/rust/cronixui/src/components/alert.rs +95 -0
  103. package/packages/rust/cronixui/src/components/avatar.rs +85 -0
  104. package/packages/rust/cronixui/src/components/badge.rs +35 -0
  105. package/packages/rust/cronixui/src/components/breadcrumb.rs +58 -0
  106. package/packages/rust/cronixui/src/components/button.rs +70 -0
  107. package/packages/rust/cronixui/src/components/card.rs +259 -0
  108. package/packages/rust/cronixui/src/components/command_palette.rs +254 -0
  109. package/packages/rust/cronixui/src/components/dropdown.rs +179 -0
  110. package/packages/rust/cronixui/src/components/file_input.rs +74 -0
  111. package/packages/rust/cronixui/src/components/input.rs +21 -0
  112. package/packages/rust/cronixui/src/components/list.rs +38 -0
  113. package/packages/rust/cronixui/src/components/mod.rs +51 -0
  114. package/packages/rust/cronixui/src/{modal.rs → components/modal.rs} +15 -1
  115. package/packages/rust/cronixui/src/components/nav.rs +19 -0
  116. package/packages/rust/cronixui/src/{pagination.rs → components/pagination.rs} +14 -13
  117. package/packages/rust/cronixui/src/components/progress.rs +50 -0
  118. package/packages/rust/cronixui/src/components/search.rs +185 -0
  119. package/packages/rust/cronixui/src/components/skeleton.rs +63 -0
  120. package/packages/rust/cronixui/src/components/spinner.rs +21 -0
  121. package/packages/rust/cronixui/src/components/table.rs +56 -0
  122. package/packages/rust/cronixui/src/components/tabs.rs +43 -0
  123. package/packages/rust/cronixui/src/components/toast.rs +69 -0
  124. package/packages/rust/cronixui/src/{toggle.rs → components/toggle.rs} +7 -5
  125. package/packages/rust/cronixui/src/components/tooltip.rs +11 -0
  126. package/packages/rust/cronixui/src/lib.rs +111 -64
  127. package/packages/rust/cronixui/src/tokens.rs +97 -127
  128. package/packages/web/src/variables.css +81 -81
  129. package/packages/go/cronixui/tokens.go +0 -129
  130. package/packages/python/cronixui/pyproject.toml +0 -11
  131. package/packages/react/src/components/Accordion.jsx +0 -50
  132. package/packages/react/src/components/Alert.jsx +0 -62
  133. package/packages/react/src/components/Avatar.jsx +0 -34
  134. package/packages/react/src/components/Badge.jsx +0 -15
  135. package/packages/react/src/components/Breadcrumb.jsx +0 -27
  136. package/packages/react/src/components/Button.jsx +0 -21
  137. package/packages/react/src/components/Card.jsx +0 -23
  138. package/packages/react/src/components/Checkbox.jsx +0 -27
  139. package/packages/react/src/components/CommandPalette.jsx +0 -93
  140. package/packages/react/src/components/Dropdown.jsx +0 -48
  141. package/packages/react/src/components/FileInput.jsx +0 -44
  142. package/packages/react/src/components/Input.jsx +0 -22
  143. package/packages/react/src/components/List.jsx +0 -29
  144. package/packages/react/src/components/Modal.jsx +0 -65
  145. package/packages/react/src/components/Nav.jsx +0 -50
  146. package/packages/react/src/components/Pagination.jsx +0 -81
  147. package/packages/react/src/components/Progress.jsx +0 -23
  148. package/packages/react/src/components/Radio.jsx +0 -50
  149. package/packages/react/src/components/Search.jsx +0 -70
  150. package/packages/react/src/components/Select.jsx +0 -33
  151. package/packages/react/src/components/Skeleton.jsx +0 -15
  152. package/packages/react/src/components/Slider.jsx +0 -29
  153. package/packages/react/src/components/Spinner.jsx +0 -5
  154. package/packages/react/src/components/Stat.jsx +0 -19
  155. package/packages/react/src/components/Table.jsx +0 -48
  156. package/packages/react/src/components/Tabs.jsx +0 -65
  157. package/packages/react/src/components/Tag.jsx +0 -19
  158. package/packages/react/src/components/Textarea.jsx +0 -17
  159. package/packages/react/src/components/Toast.jsx +0 -78
  160. package/packages/react/src/components/Toggle.jsx +0 -34
  161. package/packages/react/src/components/Tooltip.jsx +0 -12
  162. package/packages/react/src/index.d.ts +0 -103
  163. package/packages/react/src/index.js +0 -33
  164. package/packages/rust/cronixui/src/accordion.rs +0 -49
  165. package/packages/rust/cronixui/src/command_palette.rs +0 -62
  166. package/packages/rust/cronixui/src/dropdown.rs +0 -31
  167. package/packages/rust/cronixui/src/search.rs +0 -49
  168. package/packages/rust/cronixui/src/tabs.rs +0 -23
  169. package/packages/rust/cronixui/src/toast.rs +0 -70
@@ -0,0 +1,121 @@
1
+ import 'package:flutter/material.dart';
2
+ import '../tokens/colors.dart';
3
+ import '../tokens/spacing.dart';
4
+
5
+ enum CnToastVariant { info, success, warning, error }
6
+
7
+ class CnToast {
8
+ final String message;
9
+ final CnToastVariant variant;
10
+ final Duration duration;
11
+ final IconData? icon;
12
+ final String? actionLabel;
13
+ final VoidCallback? onAction;
14
+
15
+ CnToast({
16
+ required this.message,
17
+ this.variant = CnToastVariant.info,
18
+ this.duration = const Duration(seconds: 3),
19
+ this.icon,
20
+ this.actionLabel,
21
+ this.onAction,
22
+ });
23
+
24
+ IconData get _defaultIcon {
25
+ switch (variant) {
26
+ case CnToastVariant.info:
27
+ return Icons.info_outline;
28
+ case CnToastVariant.success:
29
+ return Icons.check_circle_outline;
30
+ case CnToastVariant.warning:
31
+ return Icons.warning_amber_outlined;
32
+ case CnToastVariant.error:
33
+ return Icons.error_outline;
34
+ }
35
+ }
36
+
37
+ Color get _backgroundColor {
38
+ switch (variant) {
39
+ case CnToastVariant.info:
40
+ return CronixColors.info;
41
+ case CnToastVariant.success:
42
+ return CronixColors.success;
43
+ case CnToastVariant.warning:
44
+ return CronixColors.warning;
45
+ case CnToastVariant.error:
46
+ return CronixColors.error;
47
+ }
48
+ }
49
+
50
+ SnackBar toSnackBar() {
51
+ return SnackBar(
52
+ content: Row(
53
+ children: [
54
+ Icon(icon ?? _defaultIcon, color: CronixColors.text, size: 20),
55
+ const SizedBox(width: 12),
56
+ Expanded(
57
+ child: Text(
58
+ message,
59
+ style: const TextStyle(color: CronixColors.text),
60
+ ),
61
+ ),
62
+ if (actionLabel != null)
63
+ TextButton(
64
+ onPressed: onAction,
65
+ child: Text(
66
+ actionLabel!,
67
+ style: const TextStyle(
68
+ color: CronixColors.text,
69
+ fontWeight: FontWeight.w600,
70
+ ),
71
+ ),
72
+ ),
73
+ ],
74
+ ),
75
+ backgroundColor: _backgroundColor,
76
+ duration: duration,
77
+ behavior: SnackBarBehavior.floating,
78
+ shape: RoundedRectangleBorder(
79
+ borderRadius: CronixRadius.radiusMD,
80
+ ),
81
+ margin: const EdgeInsets.all(16),
82
+ );
83
+ }
84
+
85
+ static void show(
86
+ BuildContext context, {
87
+ required String message,
88
+ CnToastVariant variant = CnToastVariant.info,
89
+ Duration duration = const Duration(seconds: 3),
90
+ IconData? icon,
91
+ String? actionLabel,
92
+ VoidCallback? onAction,
93
+ }) {
94
+ final toast = CnToast(
95
+ message: message,
96
+ variant: variant,
97
+ duration: duration,
98
+ icon: icon,
99
+ actionLabel: actionLabel,
100
+ onAction: onAction,
101
+ );
102
+ ScaffoldMessenger.of(context).hideCurrentSnackBar();
103
+ ScaffoldMessenger.of(context).showSnackBar(toast.toSnackBar());
104
+ }
105
+
106
+ static void success(BuildContext context, String message) {
107
+ show(context, message: message, variant: CnToastVariant.success);
108
+ }
109
+
110
+ static void error(BuildContext context, String message) {
111
+ show(context, message: message, variant: CnToastVariant.error);
112
+ }
113
+
114
+ static void warning(BuildContext context, String message) {
115
+ show(context, message: message, variant: CnToastVariant.warning);
116
+ }
117
+
118
+ static void info(BuildContext context, String message) {
119
+ show(context, message: message, variant: CnToastVariant.info);
120
+ }
121
+ }
@@ -0,0 +1,78 @@
1
+ import 'package:flutter/material.dart';
2
+ import '../tokens/colors.dart';
3
+ import '../tokens/spacing.dart';
4
+
5
+ class CnToggle extends StatelessWidget {
6
+ final bool value;
7
+ final ValueChanged<bool>? onChanged;
8
+ final String? label;
9
+ final bool enabled;
10
+ final Color? activeColor;
11
+
12
+ const CnToggle({
13
+ super.key,
14
+ required this.value,
15
+ this.onChanged,
16
+ this.label,
17
+ this.enabled = true,
18
+ this.activeColor,
19
+ });
20
+
21
+ @override
22
+ Widget build(BuildContext context) {
23
+ final toggle = GestureDetector(
24
+ onTap: enabled && onChanged != null
25
+ ? () => onChanged!(!value)
26
+ : null,
27
+ child: AnimatedContainer(
28
+ duration: const Duration(milliseconds: 200),
29
+ width: 44,
30
+ height: 24,
31
+ decoration: BoxDecoration(
32
+ color: value
33
+ ? (activeColor ?? CronixColors.accent)
34
+ : CronixColors.border,
35
+ borderRadius: CronixRadius.radiusFull,
36
+ ),
37
+ child: AnimatedAlign(
38
+ duration: const Duration(milliseconds: 200),
39
+ alignment: value ? Alignment.centerRight : Alignment.centerLeft,
40
+ child: Container(
41
+ width: 20,
42
+ height: 20,
43
+ margin: const EdgeInsets.all(2),
44
+ decoration: BoxDecoration(
45
+ color: CronixColors.text,
46
+ borderRadius: CronixRadius.radiusFull,
47
+ ),
48
+ ),
49
+ ),
50
+ ),
51
+ );
52
+
53
+ if (label != null) {
54
+ return InkWell(
55
+ onTap: enabled && onChanged != null
56
+ ? () => onChanged!(!value)
57
+ : null,
58
+ borderRadius: CronixRadius.radiusSM,
59
+ child: Row(
60
+ mainAxisSize: MainAxisSize.min,
61
+ children: [
62
+ Text(
63
+ label!,
64
+ style: TextStyle(
65
+ color: enabled ? CronixColors.text : CronixColors.textMuted,
66
+ fontSize: 14,
67
+ ),
68
+ ),
69
+ const SizedBox(width: 12),
70
+ toggle,
71
+ ],
72
+ ),
73
+ );
74
+ }
75
+
76
+ return toggle;
77
+ }
78
+ }
@@ -0,0 +1,118 @@
1
+ import 'package:flutter/material.dart';
2
+ import '../tokens/colors.dart';
3
+ import '../tokens/spacing.dart';
4
+
5
+ class CnTooltip extends StatelessWidget {
6
+ final String message;
7
+ final Widget child;
8
+ final EdgeInsetsGeometry? padding;
9
+ final Color? backgroundColor;
10
+ final Color? textColor;
11
+ final Duration? waitDuration;
12
+ final Duration? showDuration;
13
+ final bool preferBelow;
14
+
15
+ const CnTooltip({
16
+ super.key,
17
+ required this.message,
18
+ required this.child,
19
+ this.padding,
20
+ this.backgroundColor,
21
+ this.textColor,
22
+ this.waitDuration,
23
+ this.showDuration,
24
+ this.preferBelow = true,
25
+ });
26
+
27
+ @override
28
+ Widget build(BuildContext context) {
29
+ return Tooltip(
30
+ message: message,
31
+ padding: padding ?? const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
32
+ margin: const EdgeInsets.all(8),
33
+ decoration: BoxDecoration(
34
+ color: backgroundColor ?? CronixColors.surfaceLight,
35
+ borderRadius: CronixRadius.radiusSM,
36
+ border: Border.all(color: CronixColors.border),
37
+ ),
38
+ textStyle: TextStyle(
39
+ color: textColor ?? CronixColors.text,
40
+ fontSize: 12,
41
+ ),
42
+ waitDuration: waitDuration ?? const Duration(milliseconds: 500),
43
+ showDuration: showDuration ?? const Duration(seconds: 2),
44
+ preferBelow: preferBelow,
45
+ child: child,
46
+ );
47
+ }
48
+ }
49
+
50
+ class CnRichTooltip extends StatelessWidget {
51
+ final Widget Function(BuildContext context) builder;
52
+ final Widget child;
53
+ final Offset? offset;
54
+
55
+ const CnRichTooltip({
56
+ super.key,
57
+ required this.builder,
58
+ required this.child,
59
+ this.offset,
60
+ });
61
+
62
+ @override
63
+ Widget build(BuildContext context) {
64
+ return _CnRichTooltipWrapper(
65
+ builder: builder,
66
+ offset: offset,
67
+ child: child,
68
+ );
69
+ }
70
+ }
71
+
72
+ class _CnRichTooltipWrapper extends StatefulWidget {
73
+ final Widget Function(BuildContext context) builder;
74
+ final Widget child;
75
+ final Offset? offset;
76
+
77
+ const _CnRichTooltipWrapper({
78
+ required this.builder,
79
+ required this.child,
80
+ this.offset,
81
+ });
82
+
83
+ @override
84
+ State<_CnRichTooltipWrapper> createState() => _CnRichTooltipWrapperState();
85
+ }
86
+
87
+ class _CnRichTooltipWrapperState extends State<_CnRichTooltipWrapper> {
88
+ OverlayEntry? _overlayEntry;
89
+ bool _isVisible = false;
90
+
91
+ void _showTooltip() {
92
+ _overlayEntry = OverlayEntry(
93
+ builder: widget.builder,
94
+ );
95
+ Overlay.of(context).insert(_overlayEntry!);
96
+ setState(() => _isVisible = true);
97
+ }
98
+
99
+ void _hideTooltip() {
100
+ _overlayEntry?.remove();
101
+ _overlayEntry = null;
102
+ setState(() => _isVisible = false);
103
+ }
104
+
105
+ @override
106
+ Widget build(BuildContext context) {
107
+ return MouseRegion(
108
+ onEnter: (_) => _showTooltip(),
109
+ onExit: (_) => _hideTooltip(),
110
+ child: GestureDetector(
111
+ onTapDown: (_) => _showTooltip(),
112
+ onTapUp: (_) => _hideTooltip(),
113
+ onTapCancel: () => _hideTooltip(),
114
+ child: widget.child,
115
+ ),
116
+ );
117
+ }
118
+ }
@@ -0,0 +1,20 @@
1
+ name: cronixui
2
+ description: A dark-themed Flutter UI component library with Material Design 3 base
3
+ version: 0.1.0
4
+ publish_to: none
5
+
6
+ environment:
7
+ sdk: '>=3.0.0 <4.0.0'
8
+ flutter: '>=3.16.0'
9
+
10
+ dependencies:
11
+ flutter:
12
+ sdk: flutter
13
+
14
+ dev_dependencies:
15
+ flutter_test:
16
+ sdk: flutter
17
+ flutter_lints: ^3.0.0
18
+
19
+ flutter:
20
+ uses-material-design: true