@keenmate/pure-admin-core 1.2.0 → 1.4.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 (39) hide show
  1. package/README.md +40 -1
  2. package/dist/css/main.css +1367 -515
  3. package/package.json +1 -1
  4. package/src/scss/_base-css-variables.scss +1 -0
  5. package/src/scss/_core.scss +7 -0
  6. package/src/scss/_fonts.scss +1 -17
  7. package/src/scss/_rtl-helpers.scss +161 -0
  8. package/src/scss/core-components/_alerts.scss +3 -3
  9. package/src/scss/core-components/_base.scss +4 -3
  10. package/src/scss/core-components/_buttons.scss +9 -9
  11. package/src/scss/core-components/_callouts.scss +14 -9
  12. package/src/scss/core-components/_checkbox-lists.scss +6 -6
  13. package/src/scss/core-components/_code.scss +10 -10
  14. package/src/scss/core-components/_command-palette.scss +5 -14
  15. package/src/scss/core-components/_comparison.scss +3 -3
  16. package/src/scss/core-components/_data-display.scss +347 -0
  17. package/src/scss/core-components/_detail-panel.scss +38 -26
  18. package/src/scss/core-components/_file-selector.scss +2 -2
  19. package/src/scss/core-components/_grid.scss +13 -20
  20. package/src/scss/core-components/_lists.scss +12 -12
  21. package/src/scss/core-components/_modals.scss +2 -8
  22. package/src/scss/core-components/_pagers.scss +1 -1
  23. package/src/scss/core-components/_profile.scss +11 -6
  24. package/src/scss/core-components/_settings-panel.scss +22 -9
  25. package/src/scss/core-components/_tables.scss +295 -22
  26. package/src/scss/core-components/_tabs.scss +27 -14
  27. package/src/scss/core-components/_timeline.scss +5 -5
  28. package/src/scss/core-components/_toasts.scss +57 -21
  29. package/src/scss/core-components/_tooltips.scss +11 -6
  30. package/src/scss/core-components/_utilities.scss +56 -31
  31. package/src/scss/core-components/forms/_input-groups.scss +23 -22
  32. package/src/scss/core-components/forms/_input-wrapper.scss +3 -3
  33. package/src/scss/core-components/forms/_query-editor.scss +1 -1
  34. package/src/scss/core-components/layout/_layout-responsive.scss +3 -4
  35. package/src/scss/core-components/layout/_navbar-elements.scss +17 -6
  36. package/src/scss/core-components/layout/_navbar.scss +11 -22
  37. package/src/scss/core-components/layout/_sidebar-states.scss +25 -16
  38. package/src/scss/core-components/layout/_sidebar.scss +22 -16
  39. package/src/scss/variables/_components.scss +27 -0
@@ -8,8 +8,7 @@
8
8
  .pa-navbar {
9
9
  position: fixed;
10
10
  top: 0;
11
- left: 0;
12
- right: 0;
11
+ inset-inline: 0; // RTL: works for both LTR and RTL
13
12
  height: $header-height;
14
13
  background-color: var(--pa-header-bg);
15
14
  border-bottom: $border-width-base solid var(--pa-header-border-color);
@@ -23,42 +22,32 @@
23
22
  // Body class is just a marker, no width styles on body itself
24
23
  body.pa-container-sm .pa-navbar {
25
24
  max-width: $layout-container-sm;
26
- left: 0;
27
- right: 0;
28
- margin-left: auto;
29
- margin-right: auto;
25
+ inset-inline: 0; // RTL: works for both LTR and RTL
26
+ margin-inline: auto; // RTL: centers in both directions
30
27
  }
31
28
 
32
29
  body.pa-container-md .pa-navbar {
33
30
  max-width: $layout-container-md;
34
- left: 0;
35
- right: 0;
36
- margin-left: auto;
37
- margin-right: auto;
31
+ inset-inline: 0;
32
+ margin-inline: auto;
38
33
  }
39
34
 
40
35
  body.pa-container-lg .pa-navbar {
41
36
  max-width: $layout-container-lg;
42
- left: 0;
43
- right: 0;
44
- margin-left: auto;
45
- margin-right: auto;
37
+ inset-inline: 0;
38
+ margin-inline: auto;
46
39
  }
47
40
 
48
41
  body.pa-container-xl .pa-navbar {
49
42
  max-width: $layout-container-xl;
50
- left: 0;
51
- right: 0;
52
- margin-left: auto;
53
- margin-right: auto;
43
+ inset-inline: 0;
44
+ margin-inline: auto;
54
45
  }
55
46
 
56
47
  body.pa-container-2xl .pa-navbar {
57
48
  max-width: $layout-container-2xl;
58
- left: 0;
59
- right: 0;
60
- margin-left: auto;
61
- margin-right: auto;
49
+ inset-inline: 0;
50
+ margin-inline: auto;
62
51
  }
63
52
 
64
53
  // Navbar inner content
@@ -10,7 +10,7 @@
10
10
  width: 0;
11
11
  opacity: 0;
12
12
  overflow: hidden;
13
- border-right: none;
13
+ border-inline-end: none; // RTL: flips to border-left
14
14
  }
15
15
 
16
16
  // Icon-collapse mode: show narrow icon-only bar when hidden
@@ -19,7 +19,7 @@
19
19
  opacity: 1; // Override parent opacity: 0 to make icons visible
20
20
  overflow: visible !important; // Allow flyout to show outside sidebar
21
21
  z-index: 1050; // Higher than content area (950) for flyouts
22
- border-right: $border-width-base solid $border-color; // Restore border
22
+ border-inline-end: $border-width-base solid $border-color; // RTL: flips to border-left
23
23
 
24
24
  // Enable positioning for flyouts
25
25
  .pa-sidebar__item {
@@ -64,14 +64,17 @@
64
64
  width: auto;
65
65
  overflow: visible; // Remove overflow hidden
66
66
  position: absolute;
67
- left: 100%;
67
+ inset-inline-start: 100%; // RTL: flips to right: 100%
68
68
  top: 0;
69
69
  bottom: 0;
70
70
  padding: $spacing-sm $spacing-base;
71
71
  background-color: var(--pa-sidebar-bg);
72
72
  border: $border-width-base solid var(--pa-border-color);
73
- border-left: none;
74
- border-radius: 0 $border-radius $border-radius 0;
73
+ border-inline-start: none; // RTL: flips to border-right: none
74
+ border-start-start-radius: 0;
75
+ border-start-end-radius: $border-radius;
76
+ border-end-end-radius: $border-radius;
77
+ border-end-start-radius: 0;
75
78
  box-shadow: $shadow-md;
76
79
  white-space: nowrap;
77
80
  z-index: 10; // Relative to parent
@@ -87,7 +90,7 @@
87
90
  max-height: none !important;
88
91
  overflow: visible !important;
89
92
  position: absolute;
90
- left: 100%;
93
+ inset-inline-start: 100%; // RTL: flips to right: 100%
91
94
  top: 0;
92
95
  min-width: 12rem;
93
96
  margin: 0;
@@ -95,8 +98,11 @@
95
98
  list-style: none;
96
99
  background-color: var(--pa-sidebar-submenu-bg);
97
100
  border: $border-width-base solid var(--pa-border-color);
98
- border-left: none;
99
- border-radius: 0 $border-radius $border-radius 0;
101
+ border-inline-start: none; // RTL: flips to border-right: none
102
+ border-start-start-radius: 0;
103
+ border-start-end-radius: $border-radius;
104
+ border-end-end-radius: $border-radius;
105
+ border-end-start-radius: 0;
100
106
  box-shadow: $shadow-md;
101
107
  z-index: 1001; // Higher than parent
102
108
 
@@ -140,8 +146,8 @@
140
146
 
141
147
  .pa-sidebar__chevron {
142
148
  display: inline;
143
- margin-left: auto;
144
- transform: none !important; // Always point right in flyout menus (never rotate down)
149
+ margin-inline-start: auto; // RTL: flips to margin-right: auto
150
+ transform: none !important; // Always point end direction in flyout menus
145
151
  }
146
152
 
147
153
  // Nested submenu flyout (level 3)
@@ -155,7 +161,7 @@
155
161
  max-height: none !important;
156
162
  overflow: visible !important;
157
163
  position: absolute;
158
- left: 100%;
164
+ inset-inline-start: 100%; // RTL: flips to right: 100%
159
165
  top: 0;
160
166
  min-width: 19.2rem;
161
167
  margin: 0;
@@ -163,8 +169,11 @@
163
169
  list-style: none;
164
170
  background-color: var(--pa-sidebar-submenu-bg);
165
171
  border: $border-width-base solid var(--pa-border-color);
166
- border-left: none;
167
- border-radius: 0 $border-radius $border-radius 0;
172
+ border-inline-start: none; // RTL: flips to border-right: none
173
+ border-start-start-radius: 0;
174
+ border-start-end-radius: $border-radius;
175
+ border-end-end-radius: $border-radius;
176
+ border-end-start-radius: 0;
168
177
  box-shadow: $shadow-md;
169
178
  z-index: 1002; // Higher than parent submenu
170
179
 
@@ -174,7 +183,7 @@
174
183
  }
175
184
 
176
185
  .pa-sidebar__chevron {
177
- transform: none !important; // Always point right in nested flyout menus
186
+ transform: none !important; // Always point end direction in nested flyout menus
178
187
  }
179
188
  }
180
189
  }
@@ -210,13 +219,13 @@ body:not(.sidebar-hidden) {
210
219
  // Restore submenu indentation for level 2
211
220
  .pa-sidebar__submenu > .pa-sidebar__item > .pa-sidebar__link,
212
221
  .pa-sidebar__submenu > .pa-sidebar__item > .pa-sidebar__toggle {
213
- padding-left: $sidebar-submenu-indent;
222
+ padding-inline-start: $sidebar-submenu-indent; // RTL: flips to padding-right
214
223
  }
215
224
 
216
225
  // Restore submenu indentation for level 3
217
226
  .pa-sidebar__submenu .pa-sidebar__submenu > .pa-sidebar__item > .pa-sidebar__link,
218
227
  .pa-sidebar__submenu .pa-sidebar__submenu > .pa-sidebar__item > .pa-sidebar__toggle {
219
- padding-left: calc($sidebar-submenu-indent * $sidebar-submenu-indent-multiplier);
228
+ padding-inline-start: calc($sidebar-submenu-indent * $sidebar-submenu-indent-multiplier); // RTL: flips
220
229
  }
221
230
 
222
231
  // Icon maintains same position in both states
@@ -18,7 +18,7 @@
18
18
 
19
19
  .pa-layout__sidebar {
20
20
  background-color: var(--pa-sidebar-bg);
21
- border-right: $border-width-base solid var(--pa-border-color);
21
+ border-inline-end: $border-width-base solid var(--pa-border-color); // RTL: flips to border-left
22
22
  flex-shrink: 0;
23
23
  position: relative;
24
24
  }
@@ -27,7 +27,7 @@
27
27
  .pa-sidebar-resize {
28
28
  position: absolute;
29
29
  top: 0;
30
- right: 0;
30
+ inset-inline-end: 0; // RTL: flips to left
31
31
  width: 6px;
32
32
  height: 100%;
33
33
  cursor: ew-resize;
@@ -38,7 +38,7 @@
38
38
  content: '';
39
39
  position: absolute;
40
40
  top: 0;
41
- left: 50%;
41
+ inset-inline-start: 50%;
42
42
  transform: translateX(-50%);
43
43
  width: 2px;
44
44
  height: 100%;
@@ -66,7 +66,7 @@ body.pa-sidebar-resizing {
66
66
  body.pa-layout--sticky .pa-layout__sidebar {
67
67
  overflow-y: auto;
68
68
  overflow-y: overlay; // Chromium: scrollbar overlays content, doesn't reduce width
69
- overflow-x: visible; // Allow tooltips to escape right
69
+ overflow-x: visible; // Allow tooltips to escape (right in LTR, left in RTL)
70
70
  }
71
71
 
72
72
  // Sidebar component (separate BEM block)
@@ -93,7 +93,7 @@ body.pa-layout--sticky .pa-layout__sidebar {
93
93
  color: var(--pa-sidebar-text-secondary);
94
94
  text-decoration: none;
95
95
  font-weight: $font-weight-medium;
96
- border-right: $border-width-thick solid transparent; // Reserve space to prevent shift on active
96
+ border-inline-end: $border-width-thick solid transparent; // RTL: flips to border-left
97
97
 
98
98
  body.loaded & {
99
99
  transition: all $transition-fast $easing-snappy;
@@ -107,8 +107,8 @@ body.pa-layout--sticky .pa-layout__sidebar {
107
107
  &--active {
108
108
  color: var(--pa-sidebar-text);
109
109
  background-color: var(--pa-accent-hover);
110
- border-right-color: var(--pa-accent); // Only change color, not width
111
- font-weight: $font-weight-semibold; // Make active item bolder
110
+ border-inline-end-color: var(--pa-accent); // RTL: flips to border-left-color
111
+ font-weight: $font-weight-semibold;
112
112
  }
113
113
  }
114
114
 
@@ -122,7 +122,7 @@ body.pa-layout--sticky .pa-layout__sidebar {
122
122
  background: none;
123
123
  border: none;
124
124
  width: 100%;
125
- text-align: left;
125
+ text-align: start; // RTL: flips to right
126
126
  font-weight: $font-weight-medium;
127
127
  cursor: pointer;
128
128
 
@@ -181,9 +181,9 @@ body.pa-layout--sticky .pa-layout__sidebar {
181
181
 
182
182
  // Level 2 submenu links
183
183
  &__submenu > &__item > &__link {
184
- padding-left: $sidebar-submenu-indent;
184
+ padding-inline-start: $sidebar-submenu-indent; // RTL: flips to padding-right
185
185
  font-size: $font-size-md;
186
- border-right: $border-width-medium solid transparent; // Reserve space to prevent shift on active
186
+ border-inline-end: $border-width-medium solid transparent; // RTL: flips to border-left
187
187
 
188
188
  &:hover {
189
189
  background-color: var(--pa-sidebar-submenu-hover-bg);
@@ -191,38 +191,44 @@ body.pa-layout--sticky .pa-layout__sidebar {
191
191
 
192
192
  &--active {
193
193
  background-color: var(--pa-sidebar-submenu-active-bg);
194
- border-right-color: var(--pa-accent); // Only change color, not width
194
+ border-inline-end-color: var(--pa-accent); // RTL: flips to border-left-color
195
195
  }
196
196
  }
197
197
 
198
198
  // Level 2 submenu toggles (for third level)
199
199
  &__submenu > &__item > &__toggle {
200
- padding-left: $sidebar-submenu-indent;
200
+ padding-inline-start: $sidebar-submenu-indent; // RTL: flips to padding-right
201
201
  font-size: $font-size-md;
202
202
  }
203
203
 
204
204
  // Level 3 submenu links
205
205
  &__submenu &__submenu > &__item > &__link {
206
- padding-left: calc($sidebar-submenu-indent * $sidebar-submenu-indent-multiplier);
206
+ padding-inline-start: calc($sidebar-submenu-indent * $sidebar-submenu-indent-multiplier); // RTL: flips
207
207
  font-size: $font-size-sm;
208
- border-right: $border-width-base solid transparent; // Reserve space to prevent shift on active
208
+ border-inline-end: $border-width-base solid transparent; // RTL: flips to border-left
209
209
 
210
210
  &--active {
211
- border-right-color: var(--pa-accent); // Only change color, not width
211
+ border-inline-end-color: var(--pa-accent); // RTL: flips to border-left-color
212
212
  }
213
213
  }
214
214
 
215
215
  // Chevron icon for toggle buttons
216
216
  &__chevron {
217
- margin-left: auto;
217
+ margin-inline-start: auto; // RTL: flips to margin-right: auto
218
218
  font-size: $font-size-xs;
219
219
 
220
220
  body.loaded & {
221
221
  transition: transform $transition-fast $easing-snappy;
222
222
  }
223
223
 
224
+ // Chevron points right (›) in LTR, left (‹) in RTL
225
+ // When open, rotates 90deg clockwise in LTR, -90deg (counter-clockwise) in RTL
224
226
  .pa-sidebar__item--open & {
225
227
  transform: rotate(90deg);
226
228
  }
229
+
230
+ [dir="rtl"] .pa-sidebar__item--open & {
231
+ transform: rotate(-90deg);
232
+ }
227
233
  }
228
234
  }
@@ -555,3 +555,30 @@ $timeline-feed-time-width: 50px !default;
555
555
  $timeline-feed-time-font-size: $font-size-xs !default;
556
556
  $timeline-feed-time-padding-top: 6px !default;
557
557
  $timeline-feed-scroll-container-max-height: 400px !default;
558
+
559
+ // ============================================================================
560
+ // DATA DISPLAY (READ-ONLY FIELDS)
561
+ // ============================================================================
562
+ $field-label-font-size: $font-size-xs !default;
563
+ $field-label-font-weight: $font-weight-semibold !default;
564
+ $field-label-opacity: 0.55 !default;
565
+ $field-value-font-size: $font-size-sm !default;
566
+ $field-gap: $spacing-xs !default;
567
+ $field-horizontal-label-width: 14rem !default;
568
+ $fields-gap: $spacing-base !default;
569
+ $fields-relaxed-gap: $spacing-lg !default;
570
+ $fields-bordered-padding: $spacing-sm !default;
571
+ $fields-bordered-border-color: $border-color !default;
572
+ $fields-striped-bg: $table-stripe !default;
573
+ $fields-cols-gap: $spacing-base !default;
574
+ $fields-border-left: 3px solid $accent-color !default;
575
+ $fields-padding-left: $spacing-base !default;
576
+ $fields-filled-bg: rgba(128, 128, 128, 0.06) !default;
577
+ $fields-filled-padding: $spacing-base !default;
578
+
579
+ // Field group (labeled section of fields)
580
+ $field-group-gap: $spacing-sm !default;
581
+ $field-group-title-font-size: $font-size-sm !default;
582
+ $field-group-title-font-weight: $font-weight-semibold !default;
583
+ $field-group-title-border-color: $border-color !default;
584
+ $field-group-spacing: $spacing-lg !default;