@paroicms/react-ui 0.4.4 → 0.5.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 (130) hide show
  1. package/dist/Accordion.d.ts +10 -0
  2. package/dist/{PuAccordion.jsx → Accordion.js} +5 -8
  3. package/dist/Alert.d.ts +10 -0
  4. package/dist/Alert.js +7 -0
  5. package/dist/Badge.d.ts +8 -0
  6. package/dist/Badge.js +6 -0
  7. package/dist/Breadcrumb.d.ts +14 -0
  8. package/dist/Breadcrumb.js +10 -0
  9. package/dist/Button.d.ts +36 -0
  10. package/dist/Button.js +74 -0
  11. package/dist/Card.d.ts +10 -0
  12. package/dist/Card.js +7 -0
  13. package/dist/Checkbox.d.ts +9 -0
  14. package/dist/Checkbox.js +12 -0
  15. package/dist/Chip.d.ts +8 -0
  16. package/dist/Chip.js +7 -0
  17. package/dist/Column.d.ts +14 -0
  18. package/dist/Column.js +7 -0
  19. package/dist/DataTable.d.ts +30 -0
  20. package/dist/DataTable.js +26 -0
  21. package/dist/DateInput.d.ts +9 -0
  22. package/dist/DateInput.js +7 -0
  23. package/dist/Dialog.d.ts +13 -0
  24. package/dist/Dialog.js +55 -0
  25. package/dist/Inplace.d.ts +12 -0
  26. package/dist/Inplace.js +16 -0
  27. package/dist/InputNumber.d.ts +10 -0
  28. package/dist/InputNumber.js +19 -0
  29. package/dist/InputText.d.ts +14 -0
  30. package/dist/InputText.js +11 -0
  31. package/dist/MenuItem.d.ts +8 -0
  32. package/dist/MenuItem.js +18 -0
  33. package/dist/MultiSelect.d.ts +17 -0
  34. package/dist/MultiSelect.js +50 -0
  35. package/dist/Panel.d.ts +11 -0
  36. package/dist/Panel.js +9 -0
  37. package/dist/PasswordInput.d.ts +8 -0
  38. package/dist/PasswordInput.js +10 -0
  39. package/dist/PopupMenu.d.ts +20 -0
  40. package/dist/{PuPopupMenu.jsx → PopupMenu.js} +45 -36
  41. package/dist/RadioButton.d.ts +9 -0
  42. package/dist/RadioButton.js +12 -0
  43. package/dist/Select.d.ts +18 -0
  44. package/dist/Select.js +11 -0
  45. package/dist/SideMenu.d.ts +5 -0
  46. package/dist/SideMenu.js +13 -0
  47. package/dist/SortableList.d.ts +19 -0
  48. package/dist/SortableList.js +27 -0
  49. package/dist/Spinner.d.ts +2 -0
  50. package/dist/Spinner.js +5 -0
  51. package/dist/SplitButton.d.ts +24 -0
  52. package/dist/SplitButton.js +42 -0
  53. package/dist/Switch.d.ts +9 -0
  54. package/dist/Switch.js +12 -0
  55. package/dist/Tabs.d.ts +22 -0
  56. package/dist/Tabs.js +21 -0
  57. package/dist/Textarea.d.ts +8 -0
  58. package/dist/Textarea.js +7 -0
  59. package/dist/ToggleButton.d.ts +11 -0
  60. package/dist/ToggleButton.js +6 -0
  61. package/dist/ToggleGroup.d.ts +15 -0
  62. package/dist/ToggleGroup.js +6 -0
  63. package/dist/Tooltip.d.ts +10 -0
  64. package/dist/Tooltip.js +50 -0
  65. package/dist/Tree.d.ts +22 -0
  66. package/dist/Tree.js +43 -0
  67. package/dist/alert-stack.d.ts +18 -0
  68. package/dist/alert-stack.js +72 -0
  69. package/dist/index.d.ts +36 -10
  70. package/dist/index.js +45 -10
  71. package/dist/paroi-ui-lib-types.d.ts +4 -4
  72. package/dist/react-ui-provider.d.ts +15 -0
  73. package/dist/react-ui-provider.js +22 -0
  74. package/package.json +16 -2
  75. package/styles/Accordion.css +46 -0
  76. package/styles/Alert.css +76 -0
  77. package/styles/Badge.css +59 -0
  78. package/styles/Breadcrumb.css +57 -0
  79. package/styles/Button.css +167 -0
  80. package/styles/Card.css +28 -0
  81. package/styles/Checkbox.css +61 -0
  82. package/styles/Chip.css +35 -0
  83. package/styles/DataTable.css +176 -0
  84. package/styles/DateInput.css +59 -0
  85. package/styles/Dialog.css +77 -0
  86. package/styles/Inplace.css +44 -0
  87. package/styles/InputNumber.css +60 -0
  88. package/styles/InputText.css +99 -0
  89. package/styles/MenuItem.css +169 -0
  90. package/styles/MultiSelect.css +158 -0
  91. package/styles/Panel.css +40 -0
  92. package/styles/PasswordInput.css +80 -0
  93. package/styles/PopupMenu.css +37 -0
  94. package/styles/RadioButton.css +60 -0
  95. package/styles/Select.css +72 -0
  96. package/styles/SideMenu.css +7 -0
  97. package/styles/SortableList.css +32 -0
  98. package/styles/Spinner.css +30 -0
  99. package/styles/SplitButton.css +143 -0
  100. package/styles/Switch.css +60 -0
  101. package/styles/Tabs.css +94 -0
  102. package/styles/Textarea.css +66 -0
  103. package/styles/ToggleButton.css +36 -0
  104. package/styles/ToggleGroup.css +55 -0
  105. package/styles/Tooltip.css +34 -0
  106. package/styles/Tree.css +161 -0
  107. package/styles/theme/base.css +40 -0
  108. package/styles/theme/common.css +410 -0
  109. package/styles/theme/index.css +15 -0
  110. package/styles/theme/margins.css +119 -0
  111. package/styles/theme/reset.css +119 -0
  112. package/styles/theme/tokens.css +226 -0
  113. package/dist/PuAccordion.d.ts +0 -9
  114. package/dist/PuButton.d.ts +0 -14
  115. package/dist/PuButton.jsx +0 -15
  116. package/dist/PuCheckbox.d.ts +0 -8
  117. package/dist/PuCheckbox.jsx +0 -13
  118. package/dist/PuInput.d.ts +0 -10
  119. package/dist/PuInput.jsx +0 -13
  120. package/dist/PuMenuItem.d.ts +0 -7
  121. package/dist/PuMenuItem.jsx +0 -33
  122. package/dist/PuPopupMenu.d.ts +0 -14
  123. package/dist/PuSelect.d.ts +0 -17
  124. package/dist/PuSelect.jsx +0 -24
  125. package/dist/PuSideMenu.d.ts +0 -4
  126. package/dist/PuSideMenu.jsx +0 -15
  127. package/dist/PuSpinner.d.ts +0 -1
  128. package/dist/PuSpinner.jsx +0 -3
  129. package/dist/svg-icons.d.ts +0 -5
  130. package/dist/svg-icons.jsx +0 -30
@@ -0,0 +1,99 @@
1
+ /* ========================================
2
+ InputText Component
3
+ ======================================== */
4
+ .PaInputText {
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: var(--space-2);
8
+
9
+ &.error .PaInputText-field {
10
+ border-color: var(--color-danger);
11
+ }
12
+
13
+ &.fullWidth {
14
+ width: 100%;
15
+ }
16
+ }
17
+
18
+ .PaInputText-wrapper {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: var(--space-2);
22
+ }
23
+
24
+ .PaInputText-label {
25
+ font-size: var(--text-sm);
26
+ font-weight: var(--font-medium);
27
+ color: var(--color-text);
28
+ }
29
+
30
+ .PaInputText-field {
31
+ width: 100%;
32
+ padding: var(--space-2) var(--space-3);
33
+ font-family: inherit;
34
+ font-size: var(--text-base);
35
+ line-height: var(--leading-normal);
36
+ color: var(--color-text);
37
+ background: var(--color-bg);
38
+ border: 1px solid var(--color-border);
39
+ border-radius: var(--radius);
40
+ transition:
41
+ border-color var(--transition),
42
+ box-shadow var(--transition);
43
+
44
+ &:hover {
45
+ border-color: var(--color-primary);
46
+ }
47
+
48
+ &:focus {
49
+ outline: none;
50
+ border-color: var(--color-primary);
51
+ box-shadow: 0 0 0 3px var(--color-primary-light);
52
+ }
53
+ }
54
+
55
+ .PaInputText-error {
56
+ font-size: var(--text-xs);
57
+ color: var(--color-danger);
58
+ }
59
+
60
+ .PaInputText-row {
61
+ display: flex;
62
+ gap: var(--space-1);
63
+
64
+ .PaInputText-field {
65
+ flex: 1;
66
+ min-width: 0;
67
+ }
68
+ }
69
+
70
+ .PaInputText-iconWrapper {
71
+ position: relative;
72
+ display: flex;
73
+
74
+ .PaInputText-field {
75
+ padding-left: var(--space-10);
76
+ }
77
+
78
+ &.iconRight .PaInputText-icon {
79
+ right: var(--space-3);
80
+ left: auto;
81
+ }
82
+
83
+ &.iconRight .PaInputText-field {
84
+ padding-right: var(--space-10);
85
+ padding-left: var(--space-3);
86
+ }
87
+ }
88
+
89
+ .PaInputText-icon {
90
+ position: absolute;
91
+ top: 50%;
92
+ left: var(--space-3);
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ color: var(--color-text-muted);
97
+ pointer-events: none;
98
+ transform: translateY(-50%);
99
+ }
@@ -0,0 +1,169 @@
1
+ /* ========================================
2
+ MenuItem Component
3
+ ======================================== */
4
+ .PaMenuItem {
5
+ display: flex;
6
+ align-items: stretch;
7
+
8
+ &.active {
9
+ background: var(--color-bg-subtle);
10
+ }
11
+
12
+ &.disabled {
13
+ cursor: not-allowed;
14
+ opacity: 0.5;
15
+ }
16
+ }
17
+
18
+ .PaMenuItem-left {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ width: 38px;
23
+ padding: var(--space-1);
24
+ color: inherit;
25
+ cursor: pointer;
26
+ background: transparent;
27
+ border: none;
28
+
29
+ &.toggle {
30
+ padding: var(--space-2) var(--space-3);
31
+
32
+ /* &:hover {
33
+ background: var(--color-bg-subtle);
34
+ } */
35
+ }
36
+ }
37
+
38
+ .PaMenuItem-label {
39
+ display: flex;
40
+ flex: 1;
41
+ align-items: center;
42
+ padding: var(--space-2);
43
+ font-family: inherit;
44
+ font-size: inherit;
45
+ color: inherit;
46
+ text-align: left;
47
+ text-decoration: none;
48
+ cursor: pointer;
49
+ background: transparent;
50
+ border: none;
51
+
52
+ /* Only apply hover to clickable elements (a, button) */
53
+ /* &:is(a, button):hover {
54
+ background: var(--color-bg-subtle);
55
+ } */
56
+
57
+ /* Non-clickable span elements */
58
+ &:is(span) {
59
+ cursor: default;
60
+ }
61
+ }
62
+
63
+ .PaMenuItem-popup {
64
+ align-self: center;
65
+ margin-left: auto;
66
+ }
67
+
68
+ /* ========================================
69
+ MenuItem in Sidebar Context
70
+ ======================================== */
71
+ .PaSidebar {
72
+ & .PaMenuItem {
73
+ padding: 0 var(--space-2);
74
+ }
75
+
76
+ /* Dark Sidebar */
77
+ &.dark .PaMenuItem {
78
+ color: var(--color-text-sidebar-muted);
79
+
80
+ & .PaMenuItem-label {
81
+ padding: var(--space-3) var(--space-2);
82
+
83
+ &:is(a, button):hover {
84
+ color: #fff;
85
+ background: var(--color-hover-sidebar-dark);
86
+ }
87
+ }
88
+
89
+ & .PaMenuItem-left.toggle:hover {
90
+ color: #fff;
91
+ background: var(--color-hover-sidebar-dark);
92
+ }
93
+
94
+ /* & .PaMenuItem-popup .PaBtn.secondary.outlined:hover {
95
+ color: var(--color-text-sidebar);
96
+ background: var(--color-hover-sidebar-dark);
97
+ border-color: var(--color-hover-sidebar-dark);
98
+ } */
99
+
100
+ /* Active state - self-contained with explicit hover */
101
+ &.active {
102
+ color: var(--color-text-inverse);
103
+ background: var(--color-primary);
104
+
105
+ & .PaMenuItem-label:is(a, button):hover {
106
+ color: var(--color-text-inverse);
107
+ background: var(--color-primary-hover);
108
+ }
109
+
110
+ & .PaMenuItem-left.toggle:hover {
111
+ color: var(--color-text-inverse);
112
+ background: var(--color-primary-hover);
113
+ }
114
+
115
+ /* & .PaMenuItem-popup .PaBtn.secondary.outlined:hover {
116
+ color: var(--color-text-inverse);
117
+ background: var(--color-primary-hover);
118
+ border-color: var(--color-primary-hover);
119
+ } */
120
+ }
121
+ }
122
+
123
+ /* Light Sidebar */
124
+ &.light .PaMenuItem {
125
+ color: var(--color-text-muted);
126
+
127
+ & .PaMenuItem-label {
128
+ padding: var(--space-3) var(--space-2);
129
+
130
+ &:is(a, button):hover {
131
+ color: var(--color-text);
132
+ background: var(--color-hover-sidebar-light);
133
+ }
134
+ }
135
+
136
+ & .PaMenuItem-left.toggle:hover {
137
+ color: var(--color-text);
138
+ background: var(--color-hover-sidebar-light);
139
+ }
140
+
141
+ /* & .PaMenuItem-popup .PaBtn.secondary.outlined:hover {
142
+ color: var(--color-text);
143
+ background: var(--color-hover-sidebar-light);
144
+ border-color: var(--color-hover-sidebar-light);
145
+ } */
146
+
147
+ /* Active state - self-contained with explicit hover */
148
+ &.active {
149
+ color: var(--color-text-inverse);
150
+ background: var(--color-primary);
151
+
152
+ & .PaMenuItem-label:is(a, button):hover {
153
+ color: var(--color-text-inverse);
154
+ background: var(--color-primary-hover);
155
+ }
156
+
157
+ & .PaMenuItem-left.toggle:hover {
158
+ color: var(--color-text-inverse);
159
+ background: var(--color-primary-hover);
160
+ }
161
+
162
+ /* & .PaMenuItem-popup .PaBtn.secondary.outlined:hover {
163
+ color: var(--color-text-inverse);
164
+ background: var(--color-primary-hover);
165
+ border-color: var(--color-primary-hover);
166
+ } */
167
+ }
168
+ }
169
+ }
@@ -0,0 +1,158 @@
1
+ /* ========================================
2
+ MultiSelect Component
3
+ ======================================== */
4
+ .PaMultiSelect {
5
+ position: relative;
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: var(--space-2);
9
+
10
+ &.error .PaMultiSelect-control {
11
+ border-color: var(--color-danger);
12
+ }
13
+
14
+ &.disabled {
15
+ cursor: not-allowed;
16
+ opacity: 0.5;
17
+ }
18
+ }
19
+
20
+ .PaMultiSelect-wrapper {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: var(--space-2);
24
+ }
25
+
26
+ .PaMultiSelect-label {
27
+ font-size: var(--text-sm);
28
+ font-weight: var(--font-medium);
29
+ color: var(--color-text);
30
+ }
31
+
32
+ .PaMultiSelect-control {
33
+ display: flex;
34
+ gap: var(--space-2);
35
+ align-items: center;
36
+ min-height: 38px;
37
+ padding: var(--space-1) var(--space-3);
38
+ cursor: pointer;
39
+ background: var(--color-bg);
40
+ border: 1px solid var(--color-border);
41
+ border-radius: var(--radius);
42
+ transition: border-color var(--transition);
43
+
44
+ &:hover {
45
+ border-color: var(--color-primary);
46
+ }
47
+
48
+ &.open {
49
+ border-color: var(--color-primary);
50
+ box-shadow: 0 0 0 3px var(--color-primary-light);
51
+ }
52
+ }
53
+
54
+ .PaMultiSelect-values {
55
+ display: flex;
56
+ flex: 1;
57
+ flex-wrap: wrap;
58
+ gap: var(--space-1);
59
+ align-items: center;
60
+ }
61
+
62
+ .PaMultiSelect-placeholder {
63
+ font-size: var(--text-sm);
64
+ color: var(--color-text-light);
65
+ }
66
+
67
+ .PaMultiSelect-chip {
68
+ display: inline-flex;
69
+ gap: var(--space-1);
70
+ align-items: center;
71
+ padding: var(--space-1) var(--space-2);
72
+ font-size: var(--text-xs);
73
+ background: var(--color-bg-subtle);
74
+ border-radius: var(--radius);
75
+ }
76
+
77
+ .PaMultiSelect-chipRemove {
78
+ display: flex;
79
+ align-items: center;
80
+ padding: 0;
81
+ color: var(--color-text-muted);
82
+ cursor: pointer;
83
+ background: transparent;
84
+ border: none;
85
+ transition: color var(--transition);
86
+
87
+ &:hover {
88
+ color: var(--color-danger);
89
+ }
90
+ }
91
+
92
+ .PaMultiSelect-icon {
93
+ flex-shrink: 0;
94
+ color: var(--color-text-muted);
95
+ }
96
+
97
+ .PaMultiSelect-dropdown {
98
+ position: absolute;
99
+ top: calc(100% + var(--space-1));
100
+ right: 0;
101
+ left: 0;
102
+ z-index: var(--z-dropdown);
103
+ max-height: 250px;
104
+ padding: var(--space-2);
105
+ overflow-y: auto;
106
+ background: var(--color-bg-elevated);
107
+ border: 1px solid var(--color-border);
108
+ border-radius: var(--radius-md);
109
+ box-shadow: var(--shadow-md);
110
+ }
111
+
112
+ .PaMultiSelect-option {
113
+ display: flex;
114
+ gap: var(--space-2);
115
+ align-items: center;
116
+ padding: var(--space-2) var(--space-3);
117
+ font-size: var(--text-sm);
118
+ cursor: pointer;
119
+ border-radius: var(--radius);
120
+ transition: background-color var(--transition);
121
+
122
+ &:hover {
123
+ background: var(--color-bg-subtle);
124
+ }
125
+
126
+ &.selected {
127
+ color: var(--color-primary-dark);
128
+ background: var(--color-primary-light);
129
+ }
130
+
131
+ &.disabled {
132
+ cursor: not-allowed;
133
+ opacity: 0.5;
134
+ }
135
+ }
136
+
137
+ .PaMultiSelect-checkbox {
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ width: 16px;
142
+ height: 16px;
143
+ font-size: var(--text-xs);
144
+ color: var(--color-primary);
145
+ border: 1px solid var(--color-border);
146
+ border-radius: var(--radius-sm);
147
+
148
+ .PaMultiSelect-option.selected & {
149
+ color: var(--color-text-inverse);
150
+ background: var(--color-primary);
151
+ border-color: var(--color-primary);
152
+ }
153
+ }
154
+
155
+ .PaMultiSelect-error {
156
+ font-size: var(--text-xs);
157
+ color: var(--color-danger);
158
+ }
@@ -0,0 +1,40 @@
1
+ /* ========================================
2
+ Panel Component
3
+ ======================================== */
4
+ .PaPanel {
5
+ background: var(--color-bg-elevated);
6
+ border: 1px solid var(--color-border-light);
7
+ border-radius: var(--radius-md);
8
+ }
9
+
10
+ .PaPanel-header {
11
+ display: flex;
12
+ gap: var(--space-2);
13
+ align-items: center;
14
+ padding: var(--space-4) var(--space-5);
15
+
16
+ &.collapsible {
17
+ cursor: pointer;
18
+ transition: background-color var(--transition);
19
+
20
+ &:hover {
21
+ background: var(--color-bg-subtle);
22
+ }
23
+ }
24
+ }
25
+
26
+ .PaPanel-chevron {
27
+ flex-shrink: 0;
28
+ color: var(--color-text-muted);
29
+ }
30
+
31
+ .PaPanel-title {
32
+ font-size: var(--text-base);
33
+ font-weight: var(--font-medium);
34
+ color: var(--color-text);
35
+ }
36
+
37
+ .PaPanel-content {
38
+ padding: var(--space-4) var(--space-5);
39
+ border-top: 1px solid var(--color-border-light);
40
+ }
@@ -0,0 +1,80 @@
1
+ /* ========================================
2
+ PasswordInput Component
3
+ ======================================== */
4
+ .PaPasswordInput {
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: var(--space-2);
8
+ }
9
+
10
+ .PaPasswordInput-wrapper {
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: var(--space-2);
14
+ }
15
+
16
+ .PaPasswordInput-label {
17
+ font-size: var(--text-sm);
18
+ font-weight: var(--font-medium);
19
+ color: var(--color-text);
20
+ }
21
+
22
+ .PaPasswordInput-inputWrapper {
23
+ position: relative;
24
+ display: flex;
25
+
26
+ &.error .PaPasswordInput-input {
27
+ border-color: var(--color-danger);
28
+ }
29
+ }
30
+
31
+ .PaPasswordInput-input {
32
+ flex: 1;
33
+ width: 100%;
34
+ padding: var(--space-2) var(--space-8) var(--space-2) var(--space-3);
35
+ font-family: inherit;
36
+ font-size: var(--text-base);
37
+ line-height: var(--leading-normal);
38
+ color: var(--color-text);
39
+ background: var(--color-bg);
40
+ border: 1px solid var(--color-border);
41
+ border-radius: var(--radius);
42
+ transition:
43
+ border-color var(--transition),
44
+ box-shadow var(--transition);
45
+
46
+ &:hover {
47
+ border-color: var(--color-primary);
48
+ }
49
+
50
+ &:focus {
51
+ outline: none;
52
+ border-color: var(--color-primary);
53
+ box-shadow: 0 0 0 3px var(--color-primary-light);
54
+ }
55
+ }
56
+
57
+ .PaPasswordInput-toggle {
58
+ position: absolute;
59
+ top: 50%;
60
+ right: var(--space-1);
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ padding: var(--space-2);
65
+ color: var(--color-text-muted);
66
+ cursor: pointer;
67
+ background: transparent;
68
+ border: none;
69
+ transform: translateY(-50%);
70
+ transition: color var(--transition);
71
+
72
+ &:hover {
73
+ color: var(--color-text);
74
+ }
75
+ }
76
+
77
+ .PaPasswordInput-error {
78
+ font-size: var(--text-xs);
79
+ color: var(--color-danger);
80
+ }
@@ -0,0 +1,37 @@
1
+ /* ========================================
2
+ PopupMenu Component
3
+ ======================================== */
4
+ .PaPopupMenu {
5
+ z-index: var(--z-popover);
6
+ min-width: 160px;
7
+ padding: var(--space-2);
8
+ background: var(--color-bg-elevated);
9
+ border: 1px solid var(--color-border);
10
+ border-radius: var(--radius-md);
11
+ box-shadow: var(--shadow-md);
12
+ }
13
+
14
+ .PaPopupMenu-content {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--space-1);
18
+ }
19
+
20
+ .PaPopupMenu-item {
21
+ cursor: pointer;
22
+ border-radius: var(--radius);
23
+ transition: background-color var(--transition);
24
+
25
+ /* &:hover {
26
+ background: var(--color-bg-subtle);
27
+ } */
28
+ }
29
+
30
+ .PaPopupMenu-submenu {
31
+ min-width: 160px;
32
+ padding: var(--space-2);
33
+ background: var(--color-bg-elevated);
34
+ border: 1px solid var(--color-border);
35
+ border-radius: var(--radius-md);
36
+ box-shadow: var(--shadow-md);
37
+ }
@@ -0,0 +1,60 @@
1
+ /* ========================================
2
+ RadioButton Component
3
+ ======================================== */
4
+ .PaRadioButton {
5
+ display: inline-flex;
6
+ gap: var(--space-2);
7
+ align-items: center;
8
+ cursor: pointer;
9
+ user-select: none;
10
+ }
11
+
12
+ .PaRadioButton-input {
13
+ display: flex;
14
+ flex-shrink: 0;
15
+ align-items: center;
16
+ justify-content: center;
17
+ width: 18px;
18
+ height: 18px;
19
+ margin: 0;
20
+ appearance: none;
21
+ cursor: pointer;
22
+ background: var(--color-bg);
23
+ border: 1px solid var(--color-border);
24
+ border-radius: var(--radius-full);
25
+ transition: all var(--transition);
26
+
27
+ &:hover {
28
+ border-color: var(--color-primary);
29
+ }
30
+
31
+ &:focus {
32
+ outline: none;
33
+ border-color: var(--color-primary);
34
+ box-shadow: 0 0 0 3px var(--color-primary-light);
35
+ }
36
+
37
+ &:checked {
38
+ background: var(--color-primary);
39
+ border-color: var(--color-primary);
40
+ }
41
+
42
+ &:checked::after {
43
+ display: block;
44
+ width: 8px;
45
+ height: 8px;
46
+ content: "";
47
+ background: var(--color-text-inverse);
48
+ border-radius: var(--radius-full);
49
+ }
50
+
51
+ &:disabled {
52
+ cursor: not-allowed;
53
+ opacity: 0.5;
54
+ }
55
+ }
56
+
57
+ .PaRadioButton-label {
58
+ font-size: var(--text-sm);
59
+ color: var(--color-text);
60
+ }
@@ -0,0 +1,72 @@
1
+ /* ========================================
2
+ Select Component
3
+ ======================================== */
4
+ .PaSelect {
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: var(--space-2);
8
+
9
+ &.error .PaSelect-field {
10
+ border-color: var(--color-danger);
11
+ }
12
+
13
+ &.fullWidth {
14
+ width: 100%;
15
+ }
16
+ }
17
+
18
+ .PaSelect-wrapper {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: var(--space-2);
22
+ }
23
+
24
+ .PaSelect-label {
25
+ font-size: var(--text-sm);
26
+ font-weight: var(--font-medium);
27
+ color: var(--color-text);
28
+ }
29
+
30
+ .PaSelect-fieldWrapper {
31
+ position: relative;
32
+ }
33
+
34
+ .PaSelect-field {
35
+ width: 100%;
36
+ padding: var(--space-2) var(--space-8) var(--space-2) var(--space-3);
37
+ font-family: inherit;
38
+ font-size: var(--text-base);
39
+ color: var(--color-text);
40
+ appearance: none;
41
+ cursor: pointer;
42
+ background-color: var(--color-bg);
43
+ border: 1px solid var(--color-border);
44
+ border-radius: var(--radius);
45
+ transition: border-color var(--transition);
46
+
47
+ &:hover {
48
+ border-color: var(--color-primary);
49
+ }
50
+
51
+ &:focus {
52
+ outline: none;
53
+ border-color: var(--color-primary);
54
+ box-shadow: 0 0 0 3px var(--color-primary-light);
55
+ }
56
+ }
57
+
58
+ .PaSelect-icon {
59
+ position: absolute;
60
+ top: 50%;
61
+ right: var(--space-3);
62
+ width: 16px;
63
+ height: 16px;
64
+ color: var(--color-text-muted);
65
+ pointer-events: none;
66
+ transform: translateY(-50%);
67
+ }
68
+
69
+ .PaSelect-error {
70
+ font-size: var(--text-xs);
71
+ color: var(--color-danger);
72
+ }
@@ -0,0 +1,7 @@
1
+ /* ========================================
2
+ SideMenu Component
3
+ ======================================== */
4
+ .PaSideMenu {
5
+ display: flex;
6
+ flex-direction: column;
7
+ }