@ziyarago/ui 0.0.0-stage → 0.1.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 (119) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/LICENSE +25 -0
  3. package/README.md +121 -2
  4. package/THIRD_PARTY_NOTICES.md +12 -0
  5. package/assets/3d/_sheet.png +0 -0
  6. package/assets/3d/archive.png +0 -0
  7. package/assets/3d/bag.png +0 -0
  8. package/assets/3d/cameraoff.png +0 -0
  9. package/assets/3d/comment.png +0 -0
  10. package/assets/3d/crowd.png +0 -0
  11. package/assets/3d/firstaid.png +0 -0
  12. package/assets/3d/flag.png +0 -0
  13. package/assets/3d/grain.png +0 -0
  14. package/assets/3d/guide.png +0 -0
  15. package/assets/3d/hotel.png +0 -0
  16. package/assets/3d/kaaba.png +0 -0
  17. package/assets/3d/logo.png +0 -0
  18. package/assets/3d/luggage.png +0 -0
  19. package/assets/3d/map.png +0 -0
  20. package/assets/3d/mosque.png +0 -0
  21. package/assets/3d/plane.png +0 -0
  22. package/assets/3d/profile.png +0 -0
  23. package/assets/3d/restaurant.png +0 -0
  24. package/assets/3d/ring360.png +0 -0
  25. package/assets/3d/shoes.png +0 -0
  26. package/assets/3d/star.png +0 -0
  27. package/assets/3d/store.png +0 -0
  28. package/assets/3d/taxi.png +0 -0
  29. package/assets/3d/threads.png +0 -0
  30. package/assets/3d/tour360.png +0 -0
  31. package/assets/3d/trash.png +0 -0
  32. package/assets/3d/umbrella.png +0 -0
  33. package/assets/3d/video.png +0 -0
  34. package/assets/3d/water.png +0 -0
  35. package/assets/brand/mark.png +0 -0
  36. package/assets/brand/ziyarago-logo-light.svg +21 -0
  37. package/assets/brand/ziyarago-logo.svg +21 -0
  38. package/assets/brand/ziyarago-mark-light.svg +13 -0
  39. package/assets/brand/ziyarago-mark.svg +13 -0
  40. package/assets/fonts/thmanyah/thmanyahsans-Black.otf +0 -0
  41. package/assets/fonts/thmanyah/thmanyahsans-Bold.otf +0 -0
  42. package/assets/fonts/thmanyah/thmanyahsans-Light.otf +0 -0
  43. package/assets/fonts/thmanyah/thmanyahsans-Medium.otf +0 -0
  44. package/assets/fonts/thmanyah/thmanyahsans-Regular.otf +0 -0
  45. package/assets/fonts/thmanyah/thmanyahserifdisplay-Black.otf +0 -0
  46. package/assets/fonts/thmanyah/thmanyahserifdisplay-Bold.otf +0 -0
  47. package/assets/fonts/thmanyah/thmanyahserifdisplay-Light.otf +0 -0
  48. package/assets/fonts/thmanyah/thmanyahserifdisplay-Medium.otf +0 -0
  49. package/assets/fonts/thmanyah/thmanyahserifdisplay-Regular.otf +0 -0
  50. package/assets/fonts/thmanyah/thmanyahseriftext-Black.otf +0 -0
  51. package/assets/fonts/thmanyah/thmanyahseriftext-Bold.otf +0 -0
  52. package/assets/fonts/thmanyah/thmanyahseriftext-Light.otf +0 -0
  53. package/assets/fonts/thmanyah/thmanyahseriftext-Medium.otf +0 -0
  54. package/assets/fonts/thmanyah/thmanyahseriftext-Regular.otf +0 -0
  55. package/dist/llms-full.txt +2293 -0
  56. package/dist/llms.txt +239 -0
  57. package/dist/manifest.json +10254 -0
  58. package/dist/style.css +1357 -0
  59. package/dist/tokens.css +48 -0
  60. package/package.json +118 -4
  61. package/src/catalog.js +4 -0
  62. package/src/core/components.js +124 -0
  63. package/src/core/components2.js +163 -0
  64. package/src/core/components3.js +35 -0
  65. package/src/core/components4.js +58 -0
  66. package/src/core/components6.js +48 -0
  67. package/src/core/components7.js +42 -0
  68. package/src/core/dialog.js +65 -0
  69. package/src/core/index.js +9 -0
  70. package/src/core/pages.js +51 -0
  71. package/src/meta/README.md +29 -0
  72. package/src/meta/actions.js +161 -0
  73. package/src/meta/data.js +327 -0
  74. package/src/meta/domain.js +212 -0
  75. package/src/meta/feedback.js +153 -0
  76. package/src/meta/forms.js +453 -0
  77. package/src/meta/groups.js +16 -0
  78. package/src/meta/index.js +14 -0
  79. package/src/meta/layout.js +159 -0
  80. package/src/meta/media.js +104 -0
  81. package/src/meta/navigation.js +99 -0
  82. package/src/meta/overlay.js +264 -0
  83. package/src/meta/pages.js +229 -0
  84. package/src/meta/templates.json +2422 -0
  85. package/src/meta/typography.js +58 -0
  86. package/src/nuxt/module.mjs +29 -0
  87. package/src/nuxt/plugin.mjs +9 -0
  88. package/src/react/index.js +31 -0
  89. package/src/styles/components.css +162 -0
  90. package/src/styles/components2.css +68 -0
  91. package/src/styles/components3.css +29 -0
  92. package/src/styles/components4.css +18 -0
  93. package/src/styles/components5.css +5 -0
  94. package/src/styles/components6.css +19 -0
  95. package/src/styles/components7.css +44 -0
  96. package/src/styles/components8.css +47 -0
  97. package/src/styles/effects.css +43 -0
  98. package/src/styles/fonts.css +17 -0
  99. package/src/styles/index.css +21 -0
  100. package/src/styles/sizes/actions.css +126 -0
  101. package/src/styles/sizes/data.css +161 -0
  102. package/src/styles/sizes/domain.css +35 -0
  103. package/src/styles/sizes/feedback.css +69 -0
  104. package/src/styles/sizes/forms.css +122 -0
  105. package/src/styles/sizes/layout.css +15 -0
  106. package/src/styles/sizes/media.css +28 -0
  107. package/src/styles/sizes/navigation.css +146 -0
  108. package/src/styles/sizes/overlay.css +79 -0
  109. package/src/styles/sizes/typography.css +12 -0
  110. package/src/styles/tokens.css +47 -0
  111. package/src/theme.js +52 -0
  112. package/src/vue/index.js +29 -0
  113. package/tokens/tokens.json +9 -0
  114. package/types/core.d.ts +4 -0
  115. package/types/nuxt.d.ts +11 -0
  116. package/types/react.d.ts +189 -0
  117. package/types/shared.d.ts +18 -0
  118. package/types/theme.d.ts +6 -0
  119. package/types/vue.d.ts +192 -0
@@ -0,0 +1,15 @@
1
+ /* size overrides for the layout group. Only [data-size] selectors, see the size scale at the end of tokens.css */
2
+ .zg-div[data-size="xs"]{font-size:10px;gap:8px}.zg-div[data-size="sm"]{font-size:11px;gap:10px}.zg-div[data-size="lg"]{font-size:13px;gap:14px}.zg-div[data-size="xl"]{font-size:15px;gap:16px}
3
+ .zg-setsec[data-size="xs"]{padding:10px 0;gap:12px}.zg-setsec[data-size="sm"]{padding:14px 0;gap:16px}.zg-setsec[data-size="lg"]{padding:26px 0;gap:32px}.zg-setsec[data-size="xl"]{padding:34px 0;gap:40px}
4
+ .zg-setsec[data-size="xs"] b{font-size:13px!important}.zg-setsec[data-size="sm"] b{font-size:14px!important}.zg-setsec[data-size="lg"] b{font-size:18px!important}.zg-setsec[data-size="xl"] b{font-size:21px!important}
5
+ .zg-setsec[data-size="xs"] .zg-hint{font-size:11px!important}.zg-setsec[data-size="sm"] .zg-hint{font-size:12px!important}.zg-setsec[data-size="lg"] .zg-hint{font-size:14px!important}.zg-setsec[data-size="xl"] .zg-hint{font-size:15px!important}
6
+ .zg-setsec[data-size="xs"]>.zg-field{gap:8px!important}.zg-setsec[data-size="sm"]>.zg-field{gap:10px!important}.zg-setsec[data-size="lg"]>.zg-field{gap:18px!important}.zg-setsec[data-size="xl"]>.zg-field{gap:22px!important}
7
+ .zg-page-head[data-size="xs"] h1{font-size:20px}.zg-page-head[data-size="sm"] h1{font-size:24px}.zg-page-head[data-size="lg"] h1{font-size:clamp(32px,3.6vw,48px)}.zg-page-head[data-size="xl"] h1{font-size:clamp(38px,4.4vw,58px)}
8
+ .zg-page-head[data-size="xs"] p{font-size:12px}.zg-page-head[data-size="sm"] p{font-size:13px}.zg-page-head[data-size="lg"] p{font-size:17px}.zg-page-head[data-size="xl"] p{font-size:19px}
9
+ .zg-page-head[data-size="xs"]{gap:8px}.zg-page-head[data-size="sm"]{gap:12px}.zg-page-head[data-size="lg"]{gap:20px}.zg-page-head[data-size="xl"]{gap:24px}
10
+ .zg-liquid[data-size="xs"]{padding:8px}.zg-liquid[data-size="sm"]{padding:12px}.zg-liquid[data-size="lg"]{padding:28px}.zg-liquid[data-size="xl"]{padding:36px}
11
+ .zg-foot[data-size="xs"]{padding:8px 4px;gap:8px}.zg-foot[data-size="sm"]{padding:12px 4px;gap:12px}.zg-foot[data-size="lg"]{padding:24px 4px;gap:20px}.zg-foot[data-size="xl"]{padding:32px 4px;gap:24px}
12
+ .zg-foot[data-size="xs"] span,.zg-foot[data-size="xs"] a{font-size:11px!important}.zg-foot[data-size="sm"] span,.zg-foot[data-size="sm"] a{font-size:12px!important}.zg-foot[data-size="lg"] span,.zg-foot[data-size="lg"] a{font-size:15px!important}.zg-foot[data-size="xl"] span,.zg-foot[data-size="xl"] a{font-size:17px!important}
13
+ .zg-sort[data-size="xs"]{gap:4px;font-size:.8em}.zg-sort[data-size="sm"]{gap:5px;font-size:.9em}.zg-sort[data-size="lg"]{gap:8px;font-size:1.1em}.zg-sort[data-size="xl"]{gap:10px;font-size:1.25em}
14
+ .zg-sort[data-size="xs"] .zg-sort__i{padding:3px 4px 3px 8px;gap:6px;border-radius:10px}.zg-sort[data-size="sm"] .zg-sort__i{padding:5px 6px 5px 10px;gap:8px;border-radius:13px}
15
+ .zg-sort[data-size="lg"] .zg-sort__i{padding:11px 11px 11px 15px;gap:12px}.zg-sort[data-size="xl"] .zg-sort__i{padding:14px 14px 14px 18px;gap:14px}
@@ -0,0 +1,28 @@
1
+ /* size overrides for the media group. Only [data-size] selectors, see the size scale at the end of tokens.css */
2
+ /* Gallery: thumbnails */
3
+ .zg-gal[data-size="xs"] .zg-gal__t{gap:4px}
4
+ .zg-gal[data-size="sm"] .zg-gal__t{gap:6px}
5
+ .zg-gal[data-size="md"] .zg-gal__t{gap:8px}
6
+ .zg-gal[data-size="lg"] .zg-gal__t{gap:10px}
7
+ .zg-gal[data-size="xl"] .zg-gal__t{gap:12px}
8
+ .zg-gal[data-size="xs"] .zg-gal__t button{width:48px;border-radius:8px}
9
+ .zg-gal[data-size="sm"] .zg-gal__t button{width:64px;border-radius:10px}
10
+ .zg-gal[data-size="md"] .zg-gal__t button{width:84px;border-radius:16px}
11
+ .zg-gal[data-size="lg"] .zg-gal__t button{width:112px;border-radius:18px}
12
+ .zg-gal[data-size="xl"] .zg-gal__t button{width:144px;border-radius:20px}
13
+ /* Carousel: slide height and caption */
14
+ .zg-car[data-size="xs"]{aspect-ratio:16/6}
15
+ .zg-car[data-size="sm"]{aspect-ratio:16/7}
16
+ .zg-car[data-size="md"]{aspect-ratio:16/8}
17
+ .zg-car[data-size="lg"]{aspect-ratio:16/9}
18
+ .zg-car[data-size="xl"]{aspect-ratio:16/10}
19
+ .zg-car[data-size="xs"] .zg-car__c{padding:28px 12px 14px;font-size:11px}
20
+ .zg-car[data-size="sm"] .zg-car__c{padding:36px 16px 16px;font-size:12px}
21
+ .zg-car[data-size="md"] .zg-car__c{padding:44px 20px 18px;font-size:14px}
22
+ .zg-car[data-size="lg"] .zg-car__c{padding:52px 24px 22px;font-size:16px}
23
+ .zg-car[data-size="xl"] .zg-car__c{padding:60px 28px 26px;font-size:18px}
24
+ /* bug fix: .zg-ibtn{position:relative} overrides the absolute arrows */
25
+ .zg-car>.zg-car__p,.zg-car>.zg-car__n{position:absolute}
26
+ .zg-car[data-size]{width:100%}
27
+ .zg-car[data-size] .zg-car__s{aspect-ratio:auto;height:100%}
28
+ .zg-gal[data-size]{flex:none;width:100%}
@@ -0,0 +1,146 @@
1
+ /* size overrides for the navigation group. Only [data-size] selectors, see the size scale at the end of tokens.css */
2
+ .zg-topnav[data-size="xs"]{padding-block:6px;gap:8px}
3
+ .zg-topnav[data-size="sm"]{padding-block:8px;gap:10px}
4
+ .zg-topnav[data-size="md"]{padding-block:10px;gap:12px}
5
+ .zg-topnav[data-size="lg"]{padding-block:14px;gap:14px}
6
+ .zg-topnav[data-size="xl"]{padding-block:18px;gap:16px}
7
+ .zg-topnav[data-size="xs"] .zg-topnav__brand{font-size:13px}
8
+ .zg-topnav[data-size="sm"] .zg-topnav__brand{font-size:15px}
9
+ .zg-topnav[data-size="md"] .zg-topnav__brand{font-size:18px}
10
+ .zg-topnav[data-size="lg"] .zg-topnav__brand{font-size:21px}
11
+ .zg-topnav[data-size="xl"] .zg-topnav__brand{font-size:24px}
12
+ .zg-topnav[data-size="xs"] .zg-navitem{height:28px;font-size:12px;padding-inline:8px}
13
+ .zg-topnav[data-size="sm"] .zg-navitem{height:32px;font-size:13px;padding-inline:10px}
14
+ .zg-topnav[data-size="md"] .zg-navitem{height:40px;font-size:14px;padding-inline:12px}
15
+ .zg-topnav[data-size="lg"] .zg-navitem{height:48px;font-size:15px;padding-inline:16px}
16
+ .zg-topnav[data-size="xl"] .zg-navitem{height:56px;font-size:16px;padding-inline:20px}
17
+ .zg-topnav[data-size="xs"] .zg-icon{width:14px!important;height:14px!important}
18
+ .zg-topnav[data-size="sm"] .zg-icon{width:16px!important;height:16px!important}
19
+ .zg-topnav[data-size="md"] .zg-icon{width:18px!important;height:18px!important}
20
+ .zg-topnav[data-size="lg"] .zg-icon{width:20px!important;height:20px!important}
21
+ .zg-topnav[data-size="xl"] .zg-icon{width:22px!important;height:22px!important}
22
+ .zg-sidenav[data-size="xs"]{--w:216px;padding:10px 10px}
23
+ .zg-sidenav[data-size="sm"]{--w:240px;padding:12px 10px}
24
+ .zg-sidenav[data-size="md"]{--w:272px;padding:16px 12px}
25
+ .zg-sidenav[data-size="lg"]{--w:304px;padding:18px 14px}
26
+ .zg-sidenav[data-size="xl"]{--w:336px;padding:20px 16px}
27
+ .zg-sidenav[data-size="xs"].zg-sidenav--collapsed{--w:56px}
28
+ .zg-sidenav[data-size="sm"].zg-sidenav--collapsed{--w:64px}
29
+ .zg-sidenav[data-size="md"].zg-sidenav--collapsed{--w:76px}
30
+ .zg-sidenav[data-size="lg"].zg-sidenav--collapsed{--w:88px}
31
+ .zg-sidenav[data-size="xl"].zg-sidenav--collapsed{--w:100px}
32
+ .zg-sidenav[data-size="xs"] .zg-navitem{height:34px;font-size:12px;padding-inline:10px}
33
+ .zg-sidenav[data-size="sm"] .zg-navitem{height:40px;font-size:13px;padding-inline:12px}
34
+ .zg-sidenav[data-size="md"] .zg-navitem{height:46px;font-size:14px;padding-inline:14px}
35
+ .zg-sidenav[data-size="lg"] .zg-navitem{height:54px;font-size:15px;padding-inline:16px}
36
+ .zg-sidenav[data-size="xl"] .zg-navitem{height:62px;font-size:16px;padding-inline:18px}
37
+ .zg-sidenav[data-size="xs"] .zg-sidenav--collapsed .zg-navitem,.zg-sidenav[data-size="xs"].zg-sidenav--collapsed .zg-navitem{padding:0}
38
+ .zg-sidenav[data-size="sm"] .zg-sidenav--collapsed .zg-navitem,.zg-sidenav[data-size="sm"].zg-sidenav--collapsed .zg-navitem{padding:0}
39
+ .zg-sidenav[data-size="md"] .zg-sidenav--collapsed .zg-navitem,.zg-sidenav[data-size="md"].zg-sidenav--collapsed .zg-navitem{padding:0}
40
+ .zg-sidenav[data-size="lg"] .zg-sidenav--collapsed .zg-navitem,.zg-sidenav[data-size="lg"].zg-sidenav--collapsed .zg-navitem{padding:0}
41
+ .zg-sidenav[data-size="xl"] .zg-sidenav--collapsed .zg-navitem,.zg-sidenav[data-size="xl"].zg-sidenav--collapsed .zg-navitem{padding:0}
42
+ .zg-sidenav[data-size="xs"] .zg-icon{width:14px!important;height:14px!important}
43
+ .zg-sidenav[data-size="sm"] .zg-icon{width:16px!important;height:16px!important}
44
+ .zg-sidenav[data-size="md"] .zg-icon{width:18px!important;height:18px!important}
45
+ .zg-sidenav[data-size="lg"] .zg-icon{width:20px!important;height:20px!important}
46
+ .zg-sidenav[data-size="xl"] .zg-icon{width:22px!important;height:22px!important}
47
+ .zg-sidenav[data-size="xs"] .zg-sidenav__brand{font-size:13px}
48
+ .zg-sidenav[data-size="sm"] .zg-sidenav__brand{font-size:15px}
49
+ .zg-sidenav[data-size="md"] .zg-sidenav__brand{font-size:18px}
50
+ .zg-sidenav[data-size="lg"] .zg-sidenav__brand{font-size:21px}
51
+ .zg-sidenav[data-size="xl"] .zg-sidenav__brand{font-size:24px}
52
+ .zg-sidenav[data-size="xs"] .zg-sidenav__group{font-size:9px}
53
+ .zg-sidenav[data-size="sm"] .zg-sidenav__group{font-size:10px}
54
+ .zg-sidenav[data-size="md"] .zg-sidenav__group{font-size:11px}
55
+ .zg-sidenav[data-size="lg"] .zg-sidenav__group{font-size:12px}
56
+ .zg-sidenav[data-size="xl"] .zg-sidenav__group{font-size:13px}
57
+ .zg-subnav[data-size="xs"]{min-width:180px;gap:1px}
58
+ .zg-subnav[data-size="sm"]{min-width:200px;gap:2px}
59
+ .zg-subnav[data-size="md"]{min-width:220px;gap:2px}
60
+ .zg-subnav[data-size="lg"]{min-width:250px;gap:3px}
61
+ .zg-subnav[data-size="xl"]{min-width:280px;gap:4px}
62
+ .zg-subnav[data-size="xs"] .zg-navitem{height:32px;font-size:12px;padding-inline:10px;border-radius:11px}
63
+ .zg-subnav[data-size="sm"] .zg-navitem{height:36px;font-size:13px;padding-inline:12px;border-radius:12px}
64
+ .zg-subnav[data-size="md"] .zg-navitem{height:42px;font-size:14px;padding-inline:14px;border-radius:14px}
65
+ .zg-subnav[data-size="lg"] .zg-navitem{height:50px;font-size:15px;padding-inline:16px;border-radius:17px}
66
+ .zg-subnav[data-size="xl"] .zg-navitem{height:58px;font-size:16px;padding-inline:18px;border-radius:19px}
67
+ .zg-subnav[data-size="xs"] .zg-icon{width:14px!important;height:14px!important}
68
+ .zg-subnav[data-size="sm"] .zg-icon{width:16px!important;height:16px!important}
69
+ .zg-subnav[data-size="md"] .zg-icon{width:16px!important;height:16px!important}
70
+ .zg-subnav[data-size="lg"] .zg-icon{width:18px!important;height:18px!important}
71
+ .zg-subnav[data-size="xl"] .zg-icon{width:20px!important;height:20px!important}
72
+ .zg-subnav[data-size="xs"] .zg-sidenav__group{font-size:9px}
73
+ .zg-subnav[data-size="sm"] .zg-sidenav__group{font-size:10px}
74
+ .zg-subnav[data-size="md"] .zg-sidenav__group{font-size:11px}
75
+ .zg-subnav[data-size="lg"] .zg-sidenav__group{font-size:12px}
76
+ .zg-subnav[data-size="xl"] .zg-sidenav__group{font-size:13px}
77
+ .zg-tabs[data-size="xs"]{gap:2px}
78
+ .zg-tabs[data-size="sm"]{gap:3px}
79
+ .zg-tabs[data-size="md"]{gap:4px}
80
+ .zg-tabs[data-size="lg"]{gap:6px}
81
+ .zg-tabs[data-size="xl"]{gap:8px}
82
+ .zg-tabs[data-size="xs"] button{height:32px;font-size:12px;padding:0 10px}
83
+ .zg-tabs[data-size="sm"] button{height:38px;font-size:13px;padding:0 12px}
84
+ .zg-tabs[data-size="md"] button{height:44px;font-size:14px;padding:0 16px}
85
+ .zg-tabs[data-size="lg"] button{height:52px;font-size:15px;padding:0 20px}
86
+ .zg-tabs[data-size="xl"] button{height:60px;font-size:16px;padding:0 24px}
87
+ .zg-tabs[data-size="xs"] button[aria-selected="true"]::after{inset-inline:8px;height:2px}
88
+ .zg-tabs[data-size="sm"] button[aria-selected="true"]::after{inset-inline:10px;height:2px}
89
+ .zg-tabs[data-size="md"] button[aria-selected="true"]::after{inset-inline:12px;height:3px}
90
+ .zg-tabs[data-size="lg"] button[aria-selected="true"]::after{inset-inline:14px;height:3px}
91
+ .zg-tabs[data-size="xl"] button[aria-selected="true"]::after{inset-inline:16px;height:4px}
92
+ .zg-pt[data-size="xs"]{gap:3px}
93
+ .zg-pt[data-size="sm"]{gap:4px}
94
+ .zg-pt[data-size="md"]{gap:6px}
95
+ .zg-pt[data-size="lg"]{gap:8px}
96
+ .zg-pt[data-size="xl"]{gap:10px}
97
+ .zg-pt[data-size="xs"] button{height:28px;font-size:12px;padding:0 10px;gap:6px}
98
+ .zg-pt[data-size="sm"] button{height:32px;font-size:13px;padding:0 12px;gap:6px}
99
+ .zg-pt[data-size="md"] button{height:38px;font-size:15px;padding:0 18px;gap:8px}
100
+ .zg-pt[data-size="lg"] button{height:46px;font-size:16px;padding:0 22px;gap:10px}
101
+ .zg-pt[data-size="xl"] button{height:54px;font-size:18px;padding:0 26px;gap:12px}
102
+ .zg-pt[data-size="xs"] .zg-icon{width:14px!important;height:14px!important}
103
+ .zg-pt[data-size="sm"] .zg-icon{width:16px!important;height:16px!important}
104
+ .zg-pt[data-size="md"] .zg-icon{width:16px!important;height:16px!important}
105
+ .zg-pt[data-size="lg"] .zg-icon{width:18px!important;height:18px!important}
106
+ .zg-pt[data-size="xl"] .zg-icon{width:20px!important;height:20px!important}
107
+ .zg-crumbs[data-size="xs"]{font-size:11px;gap:4px}
108
+ .zg-crumbs[data-size="sm"]{font-size:12px;gap:6px}
109
+ .zg-crumbs[data-size="md"]{font-size:13px;gap:8px}
110
+ .zg-crumbs[data-size="lg"]{font-size:15px;gap:10px}
111
+ .zg-crumbs[data-size="xl"]{font-size:17px;gap:12px}
112
+ .zg-crumbs[data-size="xs"] .zg-icon{width:10px!important;height:10px!important}
113
+ .zg-crumbs[data-size="sm"] .zg-icon{width:12px!important;height:12px!important}
114
+ .zg-crumbs[data-size="md"] .zg-icon{width:14px!important;height:14px!important}
115
+ .zg-crumbs[data-size="lg"] .zg-icon{width:16px!important;height:16px!important}
116
+ .zg-crumbs[data-size="xl"] .zg-icon{width:18px!important;height:18px!important}
117
+ .zg-pager[data-size="xs"]{gap:2px}
118
+ .zg-pager[data-size="sm"]{gap:3px}
119
+ .zg-pager[data-size="md"]{gap:4px}
120
+ .zg-pager[data-size="lg"]{gap:6px}
121
+ .zg-pager[data-size="xl"]{gap:8px}
122
+ .zg-pager[data-size="xs"] button{min-width:26px;height:26px;font-size:11px}
123
+ .zg-pager[data-size="sm"] button{min-width:30px;height:30px;font-size:12px}
124
+ .zg-pager[data-size="md"] button{min-width:36px;height:36px;font-size:13px}
125
+ .zg-pager[data-size="lg"] button{min-width:44px;height:44px;font-size:15px}
126
+ .zg-pager[data-size="xl"] button{min-width:52px;height:52px;font-size:17px}
127
+ .zg-acc[data-size="xs"]{padding:4px;border-radius:16px}
128
+ .zg-acc[data-size="sm"]{padding:5px;border-radius:20px}
129
+ .zg-acc[data-size="md"]{padding:6px;border-radius:24px}
130
+ .zg-acc[data-size="lg"]{padding:8px;border-radius:28px}
131
+ .zg-acc[data-size="xl"]{padding:10px;border-radius:32px}
132
+ .zg-acc[data-size="xs"] .zg-acc__h{min-height:36px;font-size:12px;padding:0 12px}
133
+ .zg-acc[data-size="sm"] .zg-acc__h{min-height:44px;font-size:13px;padding:0 14px}
134
+ .zg-acc[data-size="md"] .zg-acc__h{min-height:52px;font-size:15px;padding:0 16px}
135
+ .zg-acc[data-size="lg"] .zg-acc__h{min-height:60px;font-size:16px;padding:0 20px}
136
+ .zg-acc[data-size="xl"] .zg-acc__h{min-height:68px;font-size:18px;padding:0 24px}
137
+ .zg-acc[data-size="xs"] .zg-acc__b{font-size:12px;padding:0 12px 12px}
138
+ .zg-acc[data-size="sm"] .zg-acc__b{font-size:13px;padding:0 14px 12px}
139
+ .zg-acc[data-size="md"] .zg-acc__b{font-size:14px;padding:0 16px 16px}
140
+ .zg-acc[data-size="lg"] .zg-acc__b{font-size:15px;padding:0 20px 18px}
141
+ .zg-acc[data-size="xl"] .zg-acc__b{font-size:16px;padding:0 24px 20px}
142
+ .zg-acc[data-size="xs"] .zg-icon{width:12px!important;height:12px!important}
143
+ .zg-acc[data-size="sm"] .zg-icon{width:14px!important;height:14px!important}
144
+ .zg-acc[data-size="md"] .zg-icon{width:16px!important;height:16px!important}
145
+ .zg-acc[data-size="lg"] .zg-icon{width:18px!important;height:18px!important}
146
+ .zg-acc[data-size="xl"] .zg-icon{width:20px!important;height:20px!important}
@@ -0,0 +1,79 @@
1
+ /* size overrides for the overlay group. Only [data-size] selectors, see the size scale at the end of tokens.css */
2
+
3
+ /* Modal / ConfirmDialog: data-size lands on the scrim */
4
+ .zg-modal-scrim[data-size="xs"]{--m-w:320px;--m-hp:14px 16px 12px;--m-bp:16px;--m-fp:10px 16px 14px;--m-t:15px;--m-f:13px;--m-g:12px}
5
+ .zg-modal-scrim[data-size="sm"]{--m-w:420px;--m-hp:16px 18px 14px;--m-bp:18px;--m-fp:12px 18px 16px;--m-t:17px;--m-f:14px;--m-g:14px}
6
+ .zg-modal-scrim[data-size="md"]{--m-w:520px;--m-hp:20px 20px 16px;--m-bp:20px;--m-fp:14px 20px 18px;--m-t:18px;--m-f:14px;--m-g:16px}
7
+ .zg-modal-scrim[data-size="lg"]{--m-w:640px;--m-hp:24px 26px 18px;--m-bp:26px;--m-fp:16px 26px 22px;--m-t:20px;--m-f:15px;--m-g:18px}
8
+ .zg-modal-scrim[data-size="xl"]{--m-w:720px;--m-hp:28px 32px 20px;--m-bp:32px;--m-fp:18px 32px 26px;--m-t:22px;--m-f:16px;--m-g:20px}
9
+ .zg-modal-scrim[data-size]:not(.zg-drawer-scrim):not(.zg-sheet-scrim) .zg-modal:not(.zg-stepdlg){max-width:var(--m-w)}
10
+ .zg-modal-scrim[data-size] .zg-modal__head{padding:var(--m-hp)}
11
+ .zg-modal-scrim[data-size] .zg-modal__head h3{font-size:var(--m-t)}
12
+ .zg-modal-scrim[data-size] .zg-modal__body{padding:var(--m-bp);gap:var(--m-g);font-size:var(--m-f)}
13
+ .zg-modal-scrim[data-size] .zg-modal__foot{padding:var(--m-fp)}
14
+
15
+ /* StepDialog */
16
+ .zg-modal-scrim[data-size="xs"] .zg-stepdlg{max-width:640px;min-height:320px}
17
+ .zg-modal-scrim[data-size="sm"] .zg-stepdlg{max-width:740px;min-height:380px}
18
+ .zg-modal-scrim[data-size="md"] .zg-stepdlg{max-width:860px;min-height:420px}
19
+ .zg-modal-scrim[data-size="lg"] .zg-stepdlg{max-width:980px;min-height:480px}
20
+ .zg-modal-scrim[data-size="xl"] .zg-stepdlg{max-width:1100px;min-height:540px}
21
+
22
+ /* Drawer */
23
+ .zg-drawer-scrim[data-size="xs"] .zg-drawer{width:min(280px,100%)}
24
+ .zg-drawer-scrim[data-size="sm"] .zg-drawer{width:min(340px,100%)}
25
+ .zg-drawer-scrim[data-size="md"] .zg-drawer{width:min(420px,100%)}
26
+ .zg-drawer-scrim[data-size="lg"] .zg-drawer{width:min(520px,100%)}
27
+ .zg-drawer-scrim[data-size="xl"] .zg-drawer{width:min(640px,100%)}
28
+
29
+ /* BottomSheet / Actionsheet */
30
+ .zg-sheet-scrim[data-size="xs"] .zg-sheet{width:min(360px,100%);padding:8px 14px 14px;gap:8px}
31
+ .zg-sheet-scrim[data-size="sm"] .zg-sheet{width:min(460px,100%);padding:9px 16px 16px;gap:10px}
32
+ .zg-sheet-scrim[data-size="lg"] .zg-sheet{width:min(680px,100%);padding:12px 24px 24px;gap:14px}
33
+ .zg-sheet-scrim[data-size="xl"] .zg-sheet{width:min(800px,100%);padding:14px 28px 28px;gap:16px}
34
+ .zg-sheet-scrim[data-size="xs"] .zg-sheet__t{font-size:15px}
35
+ .zg-sheet-scrim[data-size="sm"] .zg-sheet__t{font-size:16px}
36
+ .zg-sheet-scrim[data-size="lg"] .zg-sheet__t{font-size:20px}
37
+ .zg-sheet-scrim[data-size="xl"] .zg-sheet__t{font-size:22px}
38
+
39
+ /* CommandPalette: width is an inline style, so !important is required */
40
+ .zg-modal-scrim[data-size="xs"] .zg-modal[aria-label="Command palette"]{max-width:400px!important}
41
+ .zg-modal-scrim[data-size="sm"] .zg-modal[aria-label="Command palette"]{max-width:480px!important}
42
+ .zg-modal-scrim[data-size="lg"] .zg-modal[aria-label="Command palette"]{max-width:640px!important}
43
+ .zg-modal-scrim[data-size="xl"] .zg-modal[aria-label="Command palette"]{max-width:720px!important}
44
+
45
+ /* Menu / Dropdown / ContextMenu / Popover / Popconfirm: data-size on the wrapper (.zg-dd, .zg-ctx) or on the static .zg-menu */
46
+ :is(.zg-dd,.zg-ctx,.zg-menu)[data-size="xs"]{--u-h:28px;--u-px:8px;--u-g:6px;--u-f:12px;--u-r:10px;--u-mw:160px;--u-pp:10px;--u-pg:8px;--u-pw:200px;--u-pf:12px}
47
+ :is(.zg-dd,.zg-ctx,.zg-menu)[data-size="sm"]{--u-h:32px;--u-px:10px;--u-g:8px;--u-f:13px;--u-r:12px;--u-mw:190px;--u-pp:12px;--u-pg:10px;--u-pw:220px;--u-pf:13px}
48
+ :is(.zg-dd,.zg-ctx,.zg-menu)[data-size="md"]{--u-h:40px;--u-px:12px;--u-g:10px;--u-f:14px;--u-r:14px;--u-mw:220px;--u-pp:14px;--u-pg:12px;--u-pw:240px;--u-pf:14px}
49
+ :is(.zg-dd,.zg-ctx,.zg-menu)[data-size="lg"]{--u-h:48px;--u-px:16px;--u-g:12px;--u-f:15px;--u-r:16px;--u-mw:260px;--u-pp:18px;--u-pg:14px;--u-pw:280px;--u-pf:15px}
50
+ :is(.zg-dd,.zg-ctx,.zg-menu)[data-size="xl"]{--u-h:56px;--u-px:20px;--u-g:14px;--u-f:16px;--u-r:18px;--u-mw:300px;--u-pp:22px;--u-pg:16px;--u-pw:320px;--u-pf:16px}
51
+ :is(.zg-dd,.zg-ctx,.zg-menu)[data-size] .zg-menu__i{min-height:var(--u-h);padding:0 var(--u-px);gap:var(--u-g);font-size:var(--u-f);border-radius:var(--u-r)}
52
+ :is(.zg-dd,.zg-ctx)[data-size] .zg-menu{min-width:var(--u-mw)}
53
+ .zg-menu[data-size]{min-width:var(--u-mw)}
54
+ :is(.zg-dd,.zg-ctx)[data-size] .zg-menu__i svg{width:calc(var(--u-f) + 2px);height:calc(var(--u-f) + 2px)}
55
+ .zg-dd[data-size] .zg-pop{min-width:var(--u-pw);padding:var(--u-pp);gap:var(--u-pg);font-size:var(--u-pf)}
56
+ .zg-dd[data-size] .zg-pop b{font-size:var(--u-pf)!important}
57
+ .zg-dd[data-size]>.zg-btn{height:var(--zg-sz-h);font-size:var(--zg-sz-fs);padding-inline:var(--zg-sz-px)}
58
+
59
+ /* Tooltip */
60
+ .zg-tip[data-size="xs"]::after{padding:3px 7px;font-size:10px;border-radius:7px}
61
+ .zg-tip[data-size="sm"]::after{padding:4px 9px;font-size:11px;border-radius:8px}
62
+ .zg-tip[data-size="lg"]::after{padding:8px 13px;font-size:13px;border-radius:12px}
63
+ .zg-tip[data-size="xl"]::after{padding:10px 16px;font-size:14px;border-radius:14px}
64
+
65
+ /* HoverCard */
66
+ .zg-hc[data-size="xs"] .zg-hc__c{width:200px;padding:10px;font-size:12px;border-radius:14px}
67
+ .zg-hc[data-size="sm"] .zg-hc__c{width:240px;padding:12px;font-size:13px;border-radius:16px}
68
+ .zg-hc[data-size="lg"] .zg-hc__c{width:340px;padding:18px;font-size:15px;border-radius:22px}
69
+ .zg-hc[data-size="xl"] .zg-hc__c{width:400px;padding:22px;font-size:16px;border-radius:24px}
70
+
71
+ /* CommandBar: md matches the current 32px buttons */
72
+ .zg-cb[data-size="xs"]{--cb-h:24px;--cb-p:3px;--cb-s:16px}
73
+ .zg-cb[data-size="sm"]{--cb-h:28px;--cb-p:3px;--cb-s:18px}
74
+ .zg-cb[data-size="md"]{--cb-h:32px;--cb-p:4px;--cb-s:20px}
75
+ .zg-cb[data-size="lg"]{--cb-h:40px;--cb-p:5px;--cb-s:24px}
76
+ .zg-cb[data-size="xl"]{--cb-h:48px;--cb-p:6px;--cb-s:28px}
77
+ .zg-cb[data-size]{padding:var(--cb-p)}
78
+ .zg-cb[data-size] .zg-ibtn{--h:var(--cb-h)}
79
+ .zg-cb[data-size] .zg-cb__s{height:var(--cb-s)}
@@ -0,0 +1,12 @@
1
+ /* size overrides for the typography group. Only [data-size] selectors, see the size scale at the end of tokens.css */
2
+ .zg-text--xl{font-size:20px}
3
+ .zg-code-b[data-size="xs"] pre{font-size:11px;padding:10px}.zg-code-b[data-size="xs"] .zg-code-b__h{font-size:11px;padding:4px 4px 4px 10px}
4
+ .zg-code-b[data-size="sm"] pre{font-size:12px;padding:12px}.zg-code-b[data-size="sm"] .zg-code-b__h{font-size:11px;padding:6px 6px 6px 12px}
5
+ .zg-code-b[data-size="lg"] pre{font-size:14px;padding:20px}.zg-code-b[data-size="lg"] .zg-code-b__h{font-size:13px;padding:10px 10px 10px 20px}
6
+ .zg-code-b[data-size="xl"] pre{font-size:16px;padding:24px}.zg-code-b[data-size="xl"] .zg-code-b__h{font-size:14px;padding:12px 12px 12px 24px}
7
+ .zg-kbd[data-size="xs"]{min-width:18px;height:18px;padding:0 4px;font-size:10px;border-radius:5px}
8
+ .zg-kbd[data-size="sm"]{min-width:20px;height:20px;padding:0 5px;font-size:10.5px;border-radius:6px}
9
+ .zg-kbd[data-size="lg"]{min-width:26px;height:26px;padding:0 8px;font-size:12px;border-radius:8px}
10
+ .zg-kbd[data-size="xl"]{min-width:30px;height:30px;padding:0 10px;font-size:14px;border-radius:9px}
11
+ .zg-link[data-size="xs"]{font-size:.8em}.zg-link[data-size="sm"]{font-size:.9em}.zg-link[data-size="lg"]{font-size:1.1em}.zg-link[data-size="xl"]{font-size:1.25em}
12
+ .zg-link[data-size="xs"],.zg-link[data-size="sm"]{gap:3px}.zg-link[data-size="lg"],.zg-link[data-size="xl"]{gap:6px}
@@ -0,0 +1,47 @@
1
+ /* @ziyarago/ui · tokens (OKLCH). Theme: [data-theme=dark|light] · Palette: [data-palette=gold|tamam] · Direction: dir=rtl */
2
+ :root,[data-palette="gold"]{--zg-brand:oklch(0.676 0.084 67.4);--zg-brand-hover:oklch(0.73 0.09 67.4);--zg-sky:oklch(0.703 0.09 229.6)}
3
+ [data-palette="tamam"]{--zg-brand:oklch(0.77 0.23 142);--zg-brand-hover:oklch(0.82 0.23 142);--zg-sky:oklch(0.72 0.1 200)}
4
+ :root,[data-theme="dark"]{--zg-pop:oklch(0.262 0.004 17.4);
5
+ --zg-on-brand:oklch(0.2 0.02 60);
6
+ --zg-brand-soft:color-mix(in oklch,var(--zg-brand) 22%,transparent);
7
+ --zg-brand-glow:color-mix(in oklch,var(--zg-brand) 40%,transparent);
8
+ --zg-brand-text:color-mix(in oklch,var(--zg-brand) 70%,white);
9
+ --zg-sky-text:oklch(0.8 0.08 226);
10
+ --zg-bg:oklch(0.216 0.003 17.4);
11
+ --zg-s1:oklch(1 0 0 / .055);--zg-s2:oklch(1 0 0 / .085);--zg-s3:oklch(1 0 0 / .13);
12
+ --zg-glass:oklch(0.235 0.006 40 / .92);
13
+ --zg-stroke:oklch(1 0 0 / .08);
14
+ --zg-text-1:oklch(0.97 0.004 70);--zg-text-2:oklch(0.82 0.008 70);--zg-text-3:oklch(0.66 0.01 70);
15
+ --zg-inv-bg:oklch(0.96 0.004 70);--zg-inv-fg:oklch(0.2 0.01 60);
16
+ --zg-green:oklch(0.76 0.15 150);--zg-amber:oklch(0.8 0.14 80);--zg-red:oklch(0.7 0.18 25);
17
+ --zg-rim:inset 0 1px 0 oklch(1 0 0 / .16),inset 0 0 0 1px oklch(1 0 0 / .07),inset 0 -1px 0 oklch(0 0 0 / .25);
18
+ --zg-shadow-1:0 8px 24px oklch(0 0 0 / .28);--zg-shadow-2:0 24px 64px oklch(0 0 0 / .5);
19
+ }
20
+ [data-theme="light"]{--zg-pop:oklch(0.985 0.003 70);
21
+ --zg-on-brand:oklch(0.2 0.02 60);
22
+ --zg-brand-text:oklch(0.45 0.07 65);
23
+ --zg-sky-text:oklch(0.48 0.08 230);
24
+ --zg-bg:oklch(0.919 0.007 67.6);
25
+ --zg-s1:oklch(1 0 0 / .62);--zg-s2:oklch(1 0 0 / .74);--zg-s3:oklch(1 0 0 / .88);
26
+ --zg-glass:oklch(0.975 0.004 70 / .94);
27
+ --zg-stroke:oklch(0.3 0.02 60 / .15);
28
+ --zg-text-1:oklch(0.2 0.01 60);--zg-text-2:oklch(0.36 0.012 60);--zg-text-3:oklch(0.47 0.012 60);
29
+ --zg-inv-bg:oklch(0.22 0.01 60);--zg-inv-fg:oklch(0.97 0.004 70);
30
+ --zg-green:oklch(0.5 0.14 150);--zg-amber:oklch(0.55 0.13 70);--zg-red:oklch(0.52 0.19 25);
31
+ --zg-rim:inset 0 1px 0 oklch(1 0 0 / .95),inset 0 0 0 1px oklch(1 0 0 / .45),0 0 0 1px oklch(0.3 0.02 60 / .13);
32
+ --zg-shadow-1:0 8px 24px oklch(0.4 0.03 60 / .17);--zg-shadow-2:0 24px 64px oklch(0.4 0.03 60 / .22);
33
+ }
34
+ :root{--zg-z-bar:50;--zg-z-pop:60;--zg-z-modal:200;
35
+ --zg-font:'Manrope','Thmanyah Sans',system-ui,sans-serif;--zg-font-ar:'Thmanyah Sans',system-ui,sans-serif;--zg-font-ar-display:'Thmanyah Serif Display','Thmanyah Sans',serif;--zg-font-ar-text:'Thmanyah Serif Text','Thmanyah Sans',serif;--zg-font-mono:'JetBrains Mono',ui-monospace,monospace;
36
+ --zg-h-xs:28px;--zg-h-sm:32px;--zg-h-md:40px;--zg-h-lg:48px;--zg-h-xl:56px;
37
+ --zg-r-card:32px;--zg-r-tile:20px;--zg-ease:cubic-bezier(.2,.8,.2,1);
38
+ }
39
+ [dir="rtl"]{--zg-font:var(--zg-font-ar)}
40
+
41
+ /* Size scale. Adapters put data-size="xs|sm|md|lg|xl" on a component root when it has a size prop.
42
+ Component CSS must read these only inside its own [data-size] selector, never in default rules, so sizes do not leak into children. */
43
+ [data-size="xs"]{--zg-sz-h:28px;--zg-sz-fs:12px;--zg-sz-px:10px;--zg-sz-gap:6px;--zg-sz-icon:14px;--zg-sz-pad:10px}
44
+ [data-size="sm"]{--zg-sz-h:32px;--zg-sz-fs:13px;--zg-sz-px:12px;--zg-sz-gap:8px;--zg-sz-icon:16px;--zg-sz-pad:12px}
45
+ [data-size="md"]{--zg-sz-h:40px;--zg-sz-fs:14px;--zg-sz-px:16px;--zg-sz-gap:10px;--zg-sz-icon:18px;--zg-sz-pad:16px}
46
+ [data-size="lg"]{--zg-sz-h:48px;--zg-sz-fs:15px;--zg-sz-px:20px;--zg-sz-gap:12px;--zg-sz-icon:20px;--zg-sz-pad:20px}
47
+ [data-size="xl"]{--zg-sz-h:56px;--zg-sz-fs:16px;--zg-sz-px:24px;--zg-sz-gap:14px;--zg-sz-icon:22px;--zg-sz-pad:24px}
package/src/theme.js ADDED
@@ -0,0 +1,52 @@
1
+ // Framework-free theme controller: palette, theme, direction, motion, effects, background → attributes on <html>. Persists to localStorage.
2
+ const KEY = 'zg-ui';
3
+ export const PALETTES = ['gold', 'tamam'];
4
+ export const BACKGROUNDS = ['none', 'aurora', 'sunset', 'ocean', 'emerald', 'rose', 'mesh'];
5
+ const DEFAULTS = { theme: 'dark', palette: 'gold', dir: 'ltr', motion: 'auto', effects: 'auto', bg: 'none' };
6
+ const read = () => { try { return JSON.parse(localStorage.getItem(KEY) || '{}'); } catch { return {}; } };
7
+ let cur = typeof localStorage === 'undefined' ? { ...DEFAULTS } : { ...DEFAULTS, ...read() };
8
+ const subs = new Set();
9
+
10
+ export const capable = () => {
11
+ if (typeof CSS === 'undefined' || !CSS.supports) return true;
12
+ const mem = typeof navigator !== 'undefined' ? navigator.deviceMemory : undefined;
13
+ const cores = typeof navigator !== 'undefined' ? navigator.hardwareConcurrency : undefined;
14
+ return CSS.supports('backdrop-filter', 'blur(1px)') && CSS.supports('color', 'oklch(0.5 0.1 100)') && (mem == null || mem >= 4) && (cores == null || cores >= 4);
15
+ };
16
+ const reduced = () => typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;
17
+ export const resolve = (s = cur) => ({
18
+ motion: s.motion === 'auto' ? (reduced() ? 'off' : 'on') : s.motion,
19
+ effects: s.effects === 'auto' ? (capable() ? 'full' : 'lite') : s.effects,
20
+ });
21
+
22
+ const apply = () => {
23
+ if (typeof document === 'undefined') return;
24
+ const r = document.documentElement, v = resolve();
25
+ r.dataset.theme = cur.theme; r.dataset.palette = cur.palette; r.dir = cur.dir;
26
+ r.dataset.motion = v.motion; r.dataset.fx = v.effects; r.dataset.bg = cur.bg;
27
+ try { localStorage.setItem(KEY, JSON.stringify(cur)); } catch {}
28
+ subs.forEach(f => f({ ...cur }));
29
+ };
30
+
31
+ /** Inline script for <head>: applies the saved settings before first paint (no flash). */
32
+ export const themeInitScript = `try{var s=JSON.parse(localStorage.getItem('${KEY}')||'{}'),r=document.documentElement,d=r.dataset;if(s.theme)d.theme=s.theme;if(s.palette)d.palette=s.palette;if(s.dir)r.dir=s.dir;if(s.bg)d.bg=s.bg;var m=s.motion||'auto',f=s.effects||'auto';d.motion=m==='auto'?(matchMedia('(prefers-reduced-motion: reduce)').matches?'off':'on'):m;d.fx=f==='auto'?((CSS.supports('backdrop-filter','blur(1px)')&&(navigator.deviceMemory||8)>=4&&(navigator.hardwareConcurrency||8)>=4)?'full':'lite'):f}catch(e){}`;
33
+
34
+ export function useUiTheme() {
35
+ if (typeof document !== 'undefined') apply();
36
+ const set = o => { cur = { ...cur, ...o }; apply(); };
37
+ return {
38
+ get theme() { return cur.theme; }, get palette() { return cur.palette; }, get dir() { return cur.dir; },
39
+ get motion() { return cur.motion; }, get effects() { return cur.effects; }, get bg() { return cur.bg; },
40
+ get resolved() { return resolve(); },
41
+ palettes: PALETTES, backgrounds: BACKGROUNDS,
42
+ setTheme: t => set({ theme: t }), toggleTheme: () => set({ theme: cur.theme === 'dark' ? 'light' : 'dark' }),
43
+ setPalette: p => set({ palette: p }), setDir: d => set({ dir: d }), setLocale: l => set({ dir: l === 'ar' ? 'rtl' : 'ltr' }),
44
+ /** 'auto' follows prefers-reduced-motion, 'on' enables animations, 'off' disables them */
45
+ setMotion: m => set({ motion: m }),
46
+ /** 'auto' picks by browser capability, 'full' = blur, glow and animated backgrounds, 'lite' = flat and fast */
47
+ setEffects: e => set({ effects: e }),
48
+ setBackground: b => set({ bg: b }),
49
+ subscribe: f => { subs.add(f); return () => subs.delete(f); },
50
+ snapshot: () => ({ ...cur }),
51
+ };
52
+ }
@@ -0,0 +1,29 @@
1
+ // Vue 3 adapter. Usage: import { UiButton, UiAppShell } from '@ziyarago/ui/vue'
2
+ import { h, ref, reactive, defineComponent, Teleport, cloneVNode, isVNode } from 'vue';
3
+ import { components } from '../core/index.js';
4
+
5
+ const C = {};
6
+ const vh = (t, p, ...k) => { const kids = k.flat(); if (p && typeof t === 'string') for (const key of Object.keys(p)) if (/^on[A-Z]/.test(key) && !key.startsWith('onVnode')) { const nk = 'on' + key[2] + key.slice(3).toLowerCase(); if (nk !== key) { p[nk] = p[key]; delete p[key]; } } return typeof t === 'string' || !kids.length ? h(t, p, kids.length ? kids : undefined) : h(t, p, { default: () => kids }); };
7
+ const wrap = (name, def) => defineComponent({
8
+ name: 'Ui' + name, inheritAttrs: false, emits: ['update:modelValue', 'change'],
9
+ setup(_, { attrs, slots, emit }) {
10
+ const state = reactive({ ...(def.state || {}) });
11
+ const set = o => Object.assign(state, o);
12
+ return () => {
13
+ const props = { ...attrs, onChange: v => { emit('update:modelValue', v); emit('change', v); } };
14
+ if (attrs.modelValue === undefined) delete props.modelValue;
15
+ const named = {}; for (const k of Object.keys(slots)) if (k !== 'default') named[k] = slots[k]();
16
+ const children = slots.default ? slots.default() : [];
17
+ const out = def.render({ C, h: vh, props, children, slots: named, state, set, portal: (kids, to) => h(Teleport, { to: to || 'body' }, kids) });
18
+ const sz = attrs.size;
19
+ return sz && isVNode(out) && typeof out.type === 'string' ? cloneVNode(out, { 'data-size': sz }) : out;
20
+ };
21
+ },
22
+ });
23
+ for (const [name, def] of Object.entries(components)) C[name] = wrap(name, def);
24
+
25
+ export const { Button: UiButton, IconButton: UiIconButton, Badge: UiBadge, Avatar: UiAvatar, Switch: UiSwitch, Checkbox: UiCheckbox, SegmentedControl: UiSegmentedControl, Tabs: UiTabs, FilterChips: UiFilterChips, TextField: UiTextField, Select: UiSelect, CodeInput: UiCodeInput, Stepper: UiStepper, Card: UiCard, Modal: UiModal, Drawer: UiDrawer, Toast: UiToast, Breadcrumbs: UiBreadcrumbs, Pagination: UiPagination, Progress: UiProgress, Ring: UiRing, KpiTile: UiKpiTile, DataTable: UiDataTable, KanbanColumn: UiKanbanColumn, KanbanCard: UiKanbanCard, Timeline: UiTimeline, TopNav: UiTopNav, SideNav: UiSideNav, AppShell: UiAppShell, PageHeader: UiPageHeader, AuthLayout: UiAuthLayout, LeadCard: UiLeadCard, HotelCard: UiHotelCard, TourCard: UiTourCard, PrayerTimes: UiPrayerTimes, RamadanTracker: UiRamadanTracker, CallRow: UiCallRow, Alert: UiAlert, Banner: UiBanner, Accordion: UiAccordion, Skeleton: UiSkeleton, Spinner: UiSpinner, Divider: UiDivider, EmptyState: UiEmptyState, ErrorPage: UiErrorPage, DataState: UiDataState, LoadingOverlay: UiLoadingOverlay, ConfirmDialog: UiConfirmDialog, Popconfirm: UiPopconfirm, Carousel: UiCarousel, Gallery: UiGallery, Code: UiCode, PricingCard: UiPricingCard, IntegrationCard: UiIntegrationCard, IncomingCall: UiIncomingCall, CallCard: UiCallCard, Dropdown: UiDropdown, Menu: UiMenu, Tooltip: UiTooltip, HoverCard: UiHoverCard, Popover: UiPopover, CopyButton: UiCopyButton, CommandBar: UiCommandBar, CommandPalette: UiCommandPalette, NotificationBell: UiNotificationBell, ToggleGroup: UiToggleGroup, Fab: UiFab, Textarea: UiTextarea, NumberInput: UiNumberInput, PasswordInput: UiPasswordInput, SearchInput: UiSearchInput, RadioGroup: UiRadioGroup, Slider: UiSlider, Rating: UiRating, ChipInput: UiChipInput, InlineEdit: UiInlineEdit, ColorPicker: UiColorPicker, FileUpload: UiFileUpload, Combobox: UiCombobox, MultiSelect: UiMultiSelect, GroupedSelect: UiGroupedSelect, PhoneInput: UiPhoneInput, Calendar: UiCalendar, DatePicker: UiDatePicker, TimePicker: UiTimePicker, FormField: UiFormField, LoginForm: UiLoginForm, StepForm: UiStepForm, Tag: UiTag, Kbd: UiKbd, StatsCard: UiStatsCard, KpiInline: UiKpiInline, MiniChart: UiMiniChart, Descriptions: UiDescriptions, LazyImage: UiLazyImage, SystemStatus: UiSystemStatus, TreeView: UiTreeView, CalendarView: UiCalendarView, SubNav: UiSubNav, ActionRail: UiActionRail, SplitLayout: UiSplitLayout, SettingsSection: UiSettingsSection, ScrollArea: UiScrollArea, DealCard: UiDealCard, PipelineBoard: UiPipelineBoard, ContactPanel: UiContactPanel, SalesFunnel: UiSalesFunnel, BookingCard: UiBookingCard, GuestCard: UiGuestCard, RoomGrid: UiRoomGrid, RoomCalendar: UiRoomCalendar, OccupancyChart: UiOccupancyChart, Chip: UiChip, IconTile: UiIconTile, StatusIcon: UiStatusIcon, UserCell: UiUserCell, StatRow: UiStatRow, CountryRow: UiCountryRow, StatLine: UiStatLine, StatStrip: UiStatStrip, VersusBar: UiVersusBar, SegBar: UiSegBar, HeroBanner: UiHeroBanner, TabTiles: UiTabTiles, PillTabs: UiPillTabs, PillSelect: UiPillSelect, ChartCard: UiChartCard, ActionCard: UiActionCard, Snackbar: UiSnackbar, TourPopover: UiTourPopover, ProfileHeader: UiProfileHeader, AuthSplit: UiAuthSplit, StatusPage: UiStatusPage, ValidatedField: UiValidatedField, Footer: UiFooter, DataGroup: UiDataGroup, OptionCard: UiOptionCard, OptionCards: UiOptionCards, RichEditor: UiRichEditor, RangeSlider: UiRangeSlider, RangeCalendar: UiRangeCalendar, StepDialog: UiStepDialog, FullscreenDialog: UiFullscreenDialog, PageDashboard: UiPageDashboard, PagePatterns: UiPagePatterns, PageCrm: UiPageCrm, PageBookings: UiPageBookings, PageCatalog: UiPageCatalog, PageDetail: UiPageDetail, PageSettings: UiPageSettings, PageUserList: UiPageUserList, PageProfile: UiPageProfile, PageForm: UiPageForm, PageOrder: UiPageOrder, PageAccount: UiPageAccount, PagePricing: UiPagePricing, PageFaq: UiPageFaq, PageAuth: UiPageAuth, PageStatus: UiPageStatus, TreeSelect: UiTreeSelect, ContextMenu: UiContextMenu, Sortable: UiSortable, Map: UiMap, ImageUpload: UiImageUpload, Screensaver: UiScreensaver, Tour: UiTour, Heading: UiHeading, Text: UiText, Box: UiBox, Center: UiCenter, HStack: UiHStack, VStack: UiVStack, Grid: UiGrid, Link: UiLink, Pressable: UiPressable, Icon: UiIcon, Portal: UiPortal, LiquidGlass: UiLiquidGlass, BottomSheet: UiBottomSheet, Actionsheet: UiActionsheet, ImageViewer: UiImageViewer, ChatAi: UiChatAi } = C;
26
+ export const install = app => { for (const [n, c] of Object.entries(C)) app.component('Ui' + n, c); };
27
+ export { fmt, setIconBase, rules } from '../core/index.js';
28
+ export { useUiTheme } from '../theme.js';
29
+ export default { install };
@@ -0,0 +1,9 @@
1
+ {
2
+ "$description": "Design tokens for Flutter / native. Colors are sRGB hex approximations of the OKLCH source in src/styles/tokens.css.",
3
+ "palettes": { "gold": { "brand": "#BC926A", "sky": "#5FAACC" }, "tamam": { "brand": "#3FD13F", "sky": "#4FB5C4" } },
4
+ "dark": { "bg": "#1B1919", "text1": "#F1EDE8", "text2": "#D0CAC3", "text3": "#A19A93", "onBrand": "#1F1812", "green": "#6ED08F", "amber": "#E8B964", "red": "#E26E5F", "surface1": "#FFFFFF0E", "surface2": "#FFFFFF16", "surface3": "#FFFFFF21", "stroke": "#FFFFFF14" },
5
+ "light": { "bg": "#E7E3DF", "text1": "#241E18", "text2": "#4E4640", "text3": "#6C645D", "onBrand": "#1F1812", "green": "#2F7D4D", "amber": "#8A5F12", "red": "#B33A2C", "surface1": "#FFFFFF66", "surface2": "#FFFFFF8C", "surface3": "#FFFFFFBF", "stroke": "#4A3B2A1A" },
6
+ "radius": { "tile": 20, "card": 32, "pill": 999 },
7
+ "control": { "xs": 28, "sm": 32, "md": 40, "lg": 48, "xl": 56 },
8
+ "font": { "latin": "Manrope", "arabic": "Thmanyah Sans", "mono": "JetBrains Mono" }
9
+ }
@@ -0,0 +1,4 @@
1
+ // Core (framework-neutral) entry. Most apps import from '@ziyarago/ui/vue' or '@ziyarago/ui/react' instead.
2
+ export { rules, setIconBase, fmt } from './shared';
3
+ export type * from './shared';
4
+ export const components: Record<string, { state?: Record<string, unknown>; slots?: string[]; render: (ctx: any) => unknown }>;
@@ -0,0 +1,11 @@
1
+ export interface ModuleOptions {
2
+ css?: boolean;
3
+ prefix?: string;
4
+ theme?: false | { theme?: 'dark' | 'light'; palette?: 'gold' | 'tamam'; dir?: 'ltr' | 'rtl' };
5
+ }
6
+ declare const _default: import('@nuxt/schema').NuxtModule<ModuleOptions>;
7
+ export default _default;
8
+ declare module '@nuxt/schema' {
9
+ interface NuxtConfig { ziyarago?: ModuleOptions }
10
+ interface NuxtOptions { ziyarago?: ModuleOptions }
11
+ }