@sikka/hawa 0.1.14 → 0.1.16

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.
@@ -2,7 +2,7 @@ import React, { useEffect, useRef, useState } from "react"
2
2
  import clsx from "clsx"
3
3
  import useDiscloser from "../hooks/useDiscloser"
4
4
  import useBreakpoint from "../hooks/useBreakpoint"
5
- import { HawaMenu } from "../elements"
5
+ import { Button, DropdownMenu, HawaMenu, Tooltip } from "../elements"
6
6
 
7
7
  type HawaAppLayoutTypes = {
8
8
  /** The pages of the side drawer */
@@ -26,17 +26,32 @@ type HawaAppLayoutTypes = {
26
26
  username?: string
27
27
  email?: string
28
28
  drawerSize?: "sm" | "md" | "large"
29
- profileMenuItems?: MenuItems[][]
29
+ profileMenuItems?: Item[]
30
30
  onSettingsClick?: () => void
31
- DrawerFooterActions: any
31
+ DrawerFooterActions?: any
32
+ texts?: {
33
+ expandSidebar?: string
34
+ collapseSidebar?: string
35
+ }
36
+ }
37
+ type SubItem = {
38
+ label: string
39
+ value: string
40
+ highlighted?: boolean
32
41
  }
33
42
 
34
- type MenuItems = {
35
- icon?: JSX.Element
43
+ type Item = {
36
44
  label: string
37
- action?: (e: any) => void
38
- isButton?: boolean
45
+ value: string
46
+ highlighted?: boolean
47
+ subitems?: SubItem[] // Note the use of the optional modifier
39
48
  }
49
+ // type MenuItems = {
50
+ // icon?: JSX.Element
51
+ // label: string
52
+ // action?: (e: any) => void
53
+ // isButton?: boolean
54
+ // }
40
55
  export const HawaAppLayoutSimplified: React.FunctionComponent<
41
56
  HawaAppLayoutTypes
42
57
  > = ({
@@ -179,26 +194,33 @@ export const HawaAppLayoutSimplified: React.FunctionComponent<
179
194
  <div>{props.email}</div>
180
195
  </div>
181
196
  ) : null}
182
-
183
197
  {/* Profile Icon & Menu */}
184
- <HawaMenu
198
+ {/* <HawaMenu
185
199
  direction={direction}
186
- // buttonPosition={isRTL ? "top-left" : "top-right"}
187
200
  withHeader={size > 600 ? false : true}
188
201
  headerTitle={size > 600 ? "" : props.username}
189
202
  headerSubtitle={size > 600 ? "" : props.email}
190
203
  menuItems={props.profileMenuItems}
191
- // handleClose={onClose}
192
- // handleOpen={onOpen}
193
- // open={isOpen}
194
204
  position={"bottom-left"}
195
- // position={isRTL ? "bottom-left" : "bottom-left"}
196
- // position={isRTL ? "right-bottom" : "bottom-left"}
197
205
  >
198
206
  <div className="relative mx-2 h-8 w-8 cursor-pointer overflow-hidden rounded-full ring-1 ring-buttonPrimary-500 dark:bg-gray-600">
199
207
  <AvatarIcon />
200
208
  </div>
201
- </HawaMenu>
209
+ </HawaMenu> */}
210
+ <DropdownMenu
211
+ align="end"
212
+ alignOffset={10}
213
+ side={"bottom"}
214
+ sideOffset={10}
215
+ direction={isRTL ? "rtl" : "ltr"}
216
+ trigger={
217
+ <div className="relative mx-2 h-8 w-8 cursor-pointer overflow-hidden rounded ring-1 ring-primary dark:bg-gray-600">
218
+ <AvatarIcon />
219
+ </div>
220
+ }
221
+ items={props.profileMenuItems}
222
+ onItemSelect={(e) => console.log("selecting item ", e)}
223
+ />{" "}
202
224
  </div>
203
225
  </div>
204
226
  )}
@@ -311,8 +333,8 @@ export const HawaAppLayoutSimplified: React.FunctionComponent<
311
333
  dItem.subItems?.find(
312
334
  (e) => e.slug === props.currentPage
313
335
  )
314
- ? "bg-buttonPrimary-500 text-white"
315
- : "hover:bg-layoutPrimary-300",
336
+ ? "bg-primary text-white"
337
+ : "hover:bg-primary/20",
316
338
  "my-1 flex cursor-pointer flex-row items-center justify-between overflow-x-clip rounded p-2 pl-3 transition-all ",
317
339
  isRTL ? "flex-row-reverse pr-3" : "",
318
340
  openSideMenu ? "m-2" : "m-2"
@@ -353,7 +375,7 @@ export const HawaAppLayoutSimplified: React.FunctionComponent<
353
375
  {dItem.subItems && (
354
376
  <div
355
377
  className={clsx(
356
- "m-1 mx-2 flex cursor-pointer flex-col gap-[2px] overflow-clip whitespace-nowrap rounded bg-layoutPrimary-300 p-1 transition-all",
378
+ "m-1 mx-2 flex cursor-pointer flex-col gap-[2px] overflow-clip whitespace-nowrap rounded bg-primary/10 p-1 transition-all",
357
379
  openSubItem == dItem.slug && openSideMenu
358
380
  ? ""
359
381
  : "my-0 py-0",
@@ -373,8 +395,8 @@ export const HawaAppLayoutSimplified: React.FunctionComponent<
373
395
  "flex flex-row gap-2 overflow-x-clip rounded-inner p-2 px-2 text-xs",
374
396
  isRTL ? "text-right" : "text-left",
375
397
  props.currentPage === subIt.slug
376
- ? "bg-buttonPrimary-500 text-white hover:bg-primary-foreground"
377
- : "hover:bg-layoutPrimary-500 dark:text-white"
398
+ ? "bg-primary text-white"
399
+ : "hover:bg-primary-foreground hover:text-primary "
378
400
  )}
379
401
  dir={direction}
380
402
  onClick={() => {
@@ -448,25 +470,35 @@ export const HawaAppLayoutSimplified: React.FunctionComponent<
448
470
  openSideMenu ? " opacity-100" : " opacity-0"
449
471
  )}
450
472
  >
451
- <div
452
- onClick={() => setKeepOpen(!keepOpen)}
453
- className={
454
- "w-fit cursor-pointer rounded bg-gray-300 p-1 transition-all hover:bg-gray-400 bg-layoutPrimary-600 dark:hover:bg-layoutPrimary-700"
473
+ <Tooltip
474
+ side={"left"}
475
+ delayDuration={300}
476
+ content={
477
+ keepOpen
478
+ ? props.texts?.collapseSidebar || "Collapse Sidebar"
479
+ : props.texts?.expandSidebar || "Expand Sidebar"
480
+ // || "Expand Sidebar"
455
481
  }
456
482
  >
457
- <ArrowIcon
458
- // color={"black"}
459
- pointing={
460
- keepOpen
461
- ? isRTL
462
- ? "right"
463
- : "left"
464
- : isRTL
465
- ? "left"
466
- : "right"
467
- }
468
- />
469
- </div>
483
+ <Button
484
+ variant="secondary"
485
+ onClick={() => setKeepOpen(!keepOpen)}
486
+ size="icon"
487
+ >
488
+ <ArrowIcon
489
+ // color={"black"}
490
+ pointing={
491
+ keepOpen
492
+ ? isRTL
493
+ ? "right"
494
+ : "left"
495
+ : isRTL
496
+ ? "left"
497
+ : "right"
498
+ }
499
+ />
500
+ </Button>
501
+ </Tooltip>
470
502
  </div>
471
503
  </div>
472
504
  ) : null}
package/src/styles.css CHANGED
@@ -828,6 +828,10 @@ video {
828
828
  .m-\[5px\] {
829
829
  margin: 5px;
830
830
  }
831
+ .-mx-1 {
832
+ margin-left: -0.25rem;
833
+ margin-right: -0.25rem;
834
+ }
831
835
  .mx-1 {
832
836
  margin-left: 0.25rem;
833
837
  margin-right: 0.25rem;
@@ -1039,6 +1043,9 @@ video {
1039
1043
  .h-3 {
1040
1044
  height: 0.75rem;
1041
1045
  }
1046
+ .h-3\.5 {
1047
+ height: 0.875rem;
1048
+ }
1042
1049
  .h-32 {
1043
1050
  height: 8rem;
1044
1051
  }
@@ -1093,6 +1100,9 @@ video {
1093
1100
  .h-\[calc\(100\%-3\.5rem\)\] {
1094
1101
  height: calc(100% - 3.5rem);
1095
1102
  }
1103
+ .h-\[var\(--radix-select-trigger-height\)\] {
1104
+ height: var(--radix-select-trigger-height);
1105
+ }
1096
1106
  .h-auto {
1097
1107
  height: auto;
1098
1108
  }
@@ -1107,6 +1117,9 @@ video {
1107
1117
  height: -moz-min-content;
1108
1118
  height: min-content;
1109
1119
  }
1120
+ .h-px {
1121
+ height: 1px;
1122
+ }
1110
1123
  .h-screen {
1111
1124
  height: 100vh;
1112
1125
  }
@@ -1126,6 +1139,9 @@ video {
1126
1139
  .min-h-\[37\.75px\] {
1127
1140
  min-height: 37.75px;
1128
1141
  }
1142
+ .min-h-\[80px\] {
1143
+ min-height: 80px;
1144
+ }
1129
1145
  .w-0 {
1130
1146
  width: 0px;
1131
1147
  }
@@ -1171,6 +1187,9 @@ video {
1171
1187
  .w-3 {
1172
1188
  width: 0.75rem;
1173
1189
  }
1190
+ .w-3\.5 {
1191
+ width: 0.875rem;
1192
+ }
1174
1193
  .w-3\/4 {
1175
1194
  width: 75%;
1176
1195
  }
@@ -1263,6 +1282,12 @@ video {
1263
1282
  .min-w-\[32px\] {
1264
1283
  min-width: 32px;
1265
1284
  }
1285
+ .min-w-\[8rem\] {
1286
+ min-width: 8rem;
1287
+ }
1288
+ .min-w-\[var\(--radix-select-trigger-width\)\] {
1289
+ min-width: var(--radix-select-trigger-width);
1290
+ }
1266
1291
  .min-w-fit {
1267
1292
  min-width: -moz-fit-content;
1268
1293
  min-width: fit-content;
@@ -1636,6 +1661,9 @@ video {
1636
1661
  .rounded-none {
1637
1662
  border-radius: 0px;
1638
1663
  }
1664
+ .rounded-sm {
1665
+ border-radius: calc(var(--radius) - 4px);
1666
+ }
1639
1667
  .rounded-xl {
1640
1668
  border-radius: calc(var(--radius) + 4px);
1641
1669
  }
@@ -1923,9 +1951,6 @@ video {
1923
1951
  .bg-layoutPrimary-500 {
1924
1952
  background-color: var(--layout-primary-500);
1925
1953
  }
1926
- .bg-layoutPrimary-600 {
1927
- background-color: var(--layout-primary-600);
1928
- }
1929
1954
  .bg-muted {
1930
1955
  background-color: hsl(var(--muted));
1931
1956
  }
@@ -1942,6 +1967,9 @@ video {
1942
1967
  .bg-primary-foreground {
1943
1968
  background-color: hsl(var(--primary-foreground));
1944
1969
  }
1970
+ .bg-primary\/10 {
1971
+ background-color: hsl(var(--primary) / 0.1);
1972
+ }
1945
1973
  .bg-primary\/20 {
1946
1974
  background-color: hsl(var(--primary) / 0.2);
1947
1975
  }
@@ -2015,6 +2043,9 @@ video {
2015
2043
  .bg-none {
2016
2044
  background-image: none;
2017
2045
  }
2046
+ .fill-current {
2047
+ fill: currentColor;
2048
+ }
2018
2049
  .fill-primary {
2019
2050
  fill: hsl(var(--primary));
2020
2051
  }
@@ -2172,6 +2203,9 @@ video {
2172
2203
  .pl-6 {
2173
2204
  padding-left: 1.5rem;
2174
2205
  }
2206
+ .pl-8 {
2207
+ padding-left: 2rem;
2208
+ }
2175
2209
  .pl-\[20px\] {
2176
2210
  padding-left: 20px;
2177
2211
  }
@@ -2322,6 +2356,9 @@ video {
2322
2356
  .tracking-tight {
2323
2357
  letter-spacing: -0.025em;
2324
2358
  }
2359
+ .tracking-widest {
2360
+ letter-spacing: 0.1em;
2361
+ }
2325
2362
  .text-black {
2326
2363
  --tw-text-opacity: 1;
2327
2364
  color: rgb(0 0 0 / var(--tw-text-opacity));
@@ -2473,6 +2510,9 @@ video {
2473
2510
  .opacity-50 {
2474
2511
  opacity: 0.5;
2475
2512
  }
2513
+ .opacity-60 {
2514
+ opacity: 0.6;
2515
+ }
2476
2516
  .shadow {
2477
2517
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
2478
2518
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
@@ -2544,6 +2584,9 @@ video {
2544
2584
  .ring-buttonPrimary-500 {
2545
2585
  --tw-ring-color: hsl(var(--button-primary-500));
2546
2586
  }
2587
+ .ring-primary {
2588
+ --tw-ring-color: hsl(var(--primary));
2589
+ }
2547
2590
  .ring-primary\/20 {
2548
2591
  --tw-ring-color: hsl(var(--primary) / 0.2);
2549
2592
  }
@@ -2911,6 +2954,9 @@ body {
2911
2954
  .hover\:bg-primary\/10:hover {
2912
2955
  background-color: hsl(var(--primary) / 0.1);
2913
2956
  }
2957
+ .hover\:bg-primary\/20:hover {
2958
+ background-color: hsl(var(--primary) / 0.2);
2959
+ }
2914
2960
  .hover\:bg-primary\/90:hover {
2915
2961
  background-color: hsl(var(--primary) / 0.9);
2916
2962
  }
@@ -3000,6 +3046,12 @@ body {
3000
3046
  --tw-border-opacity: 1;
3001
3047
  border-color: rgb(59 130 246 / var(--tw-border-opacity));
3002
3048
  }
3049
+ .focus\:bg-accent:focus {
3050
+ background-color: hsl(var(--accent));
3051
+ }
3052
+ .focus\:text-accent-foreground:focus {
3053
+ color: hsl(var(--accent-foreground));
3054
+ }
3003
3055
  .focus\:text-white:focus {
3004
3056
  --tw-text-opacity: 1;
3005
3057
  color: rgb(255 255 255 / var(--tw-text-opacity));
@@ -3008,6 +3060,11 @@ body {
3008
3060
  outline: 2px solid transparent;
3009
3061
  outline-offset: 2px;
3010
3062
  }
3063
+ .focus\:ring-0:focus {
3064
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
3065
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
3066
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
3067
+ }
3011
3068
  .focus\:ring-2:focus {
3012
3069
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
3013
3070
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
@@ -3034,6 +3091,12 @@ body {
3034
3091
  --tw-ring-opacity: 1;
3035
3092
  --tw-ring-color: rgb(249 250 251 / var(--tw-ring-opacity));
3036
3093
  }
3094
+ .focus\:ring-ring:focus {
3095
+ --tw-ring-color: hsl(var(--ring));
3096
+ }
3097
+ .focus\:ring-offset-2:focus {
3098
+ --tw-ring-offset-width: 2px;
3099
+ }
3037
3100
  .focus-visible\:outline-none:focus-visible {
3038
3101
  outline: 2px solid transparent;
3039
3102
  outline-offset: 2px;
@@ -3108,6 +3171,22 @@ body {
3108
3171
  .data-\[disabled\]\:pointer-events-none[data-disabled] {
3109
3172
  pointer-events: none;
3110
3173
  }
3174
+ .data-\[side\=bottom\]\:translate-y-1[data-side=bottom] {
3175
+ --tw-translate-y: 0.25rem;
3176
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
3177
+ }
3178
+ .data-\[side\=left\]\:-translate-x-1[data-side=left] {
3179
+ --tw-translate-x: -0.25rem;
3180
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
3181
+ }
3182
+ .data-\[side\=right\]\:translate-x-1[data-side=right] {
3183
+ --tw-translate-x: 0.25rem;
3184
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
3185
+ }
3186
+ .data-\[side\=top\]\:-translate-y-1[data-side=top] {
3187
+ --tw-translate-y: -0.25rem;
3188
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
3189
+ }
3111
3190
  @keyframes slideUpAndFade {
3112
3191
 
3113
3192
  from {
@@ -3176,6 +3255,9 @@ body {
3176
3255
  --tw-bg-opacity: 1;
3177
3256
  background-color: hsl(252 56.0% 57.5% / var(--tw-bg-opacity));
3178
3257
  }
3258
+ .data-\[state\=open\]\:bg-accent[data-state=open] {
3259
+ background-color: hsl(var(--accent));
3260
+ }
3179
3261
  .data-\[state\=open\]\:bg-violet-4[data-state=open] {
3180
3262
  --tw-bg-opacity: 1;
3181
3263
  background-color: hsl(252 91.5% 95.5% / var(--tw-bg-opacity));
@@ -3196,6 +3278,18 @@ body {
3196
3278
  --tw-text-opacity: 1;
3197
3279
  color: hsl(250 43.0% 48.0% / var(--tw-text-opacity));
3198
3280
  }
3281
+ .data-\[disabled\]\:opacity-50[data-disabled] {
3282
+ opacity: 0.5;
3283
+ }
3284
+ .data-\[state\=open\]\:animate-in[data-state=open] {
3285
+ animation-name: enter;
3286
+ animation-duration: 150ms;
3287
+ --tw-enter-opacity: initial;
3288
+ --tw-enter-scale: initial;
3289
+ --tw-enter-rotate: initial;
3290
+ --tw-enter-translate-x: initial;
3291
+ --tw-enter-translate-y: initial;
3292
+ }
3199
3293
  .data-\[state\=closed\]\:animate-out[data-state=closed] {
3200
3294
  animation-name: exit;
3201
3295
  animation-duration: 150ms;
@@ -3208,9 +3302,15 @@ body {
3208
3302
  .data-\[state\=closed\]\:fade-out-0[data-state=closed] {
3209
3303
  --tw-exit-opacity: 0;
3210
3304
  }
3305
+ .data-\[state\=open\]\:fade-in-0[data-state=open] {
3306
+ --tw-enter-opacity: 0;
3307
+ }
3211
3308
  .data-\[state\=closed\]\:zoom-out-95[data-state=closed] {
3212
3309
  --tw-exit-scale: .95;
3213
3310
  }
3311
+ .data-\[state\=open\]\:zoom-in-95[data-state=open] {
3312
+ --tw-enter-scale: .95;
3313
+ }
3214
3314
  .data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom] {
3215
3315
  --tw-enter-translate-y: -0.5rem;
3216
3316
  }
@@ -3448,9 +3548,6 @@ body {
3448
3548
  --tw-bg-opacity: 1;
3449
3549
  background-color: rgb(31 41 55 / var(--tw-bg-opacity));
3450
3550
  }
3451
- :is(.dark .dark\:hover\:bg-layoutPrimary-700:hover) {
3452
- background-color: var(--layout-primary-700);
3453
- }
3454
3551
  :is(.dark .dark\:hover\:bg-primary\/10:hover) {
3455
3552
  background-color: hsl(var(--primary) / 0.1);
3456
3553
  }
@@ -20,7 +20,8 @@
20
20
  "signUpText": "تسجيل جديد",
21
21
  "signInText": "تسجيل الدخول",
22
22
  "createAccount": "أنشئ حساب",
23
-
23
+ "expandSidebar": "توسيع القائمة",
24
+ "collapseSidebar": "طي القائمة",
24
25
  "signInViaGoogleLabel": "الدخول بواسطة Google",
25
26
  "signInViaGithubLabel": "الدخول بواسطة Github",
26
27
  "signInViaTwitterLabel": "الدخول بواسطة Twitter",
@@ -26,7 +26,8 @@
26
26
  "signUpViaGoogleLabel": "Sign up with Google",
27
27
  "signUpViaGithubLabel": "Sign up with Github",
28
28
  "signUpViaTwitterLabel": "Sign up with Twitter",
29
-
29
+ "expandSidebar": "Expand Sidebar",
30
+ "collapseSidebar": "Collapse Sidebar",
30
31
  "fullNameRequiredText": "Full name is required",
31
32
  "passwordTooShortText": "Password too short",
32
33
  "subscribeToNewsletter": "Subscribe to newsletter?",