@qumra/fanar-native 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 (95) hide show
  1. package/README.md +83 -0
  2. package/lib/art.d.ts +8 -0
  3. package/lib/art.js +29 -0
  4. package/lib/assets/art/avatar.png +0 -0
  5. package/lib/assets/art/empty.png +0 -0
  6. package/lib/assets/art/image-placeholder.png +0 -0
  7. package/lib/assets/art/plan-update.png +0 -0
  8. package/lib/assets/brand/app-store.png +0 -0
  9. package/lib/assets/brand/etisalat.png +0 -0
  10. package/lib/assets/brand/facebook.png +0 -0
  11. package/lib/assets/brand/google-play.png +0 -0
  12. package/lib/assets/brand/instagram.png +0 -0
  13. package/lib/assets/brand/orange.png +0 -0
  14. package/lib/assets/brand/snapchat.png +0 -0
  15. package/lib/assets/brand/tiktok.png +0 -0
  16. package/lib/assets/brand/vodafone.png +0 -0
  17. package/lib/assets/brand/we.png +0 -0
  18. package/lib/assets/brand/whatsapp.png +0 -0
  19. package/lib/assets/brand/x.png +0 -0
  20. package/lib/assets/brand/youtube.png +0 -0
  21. package/lib/components/Button.d.ts +28 -0
  22. package/lib/components/Button.js +75 -0
  23. package/lib/components/Disclosure.d.ts +41 -0
  24. package/lib/components/Disclosure.js +98 -0
  25. package/lib/components/Display.d.ts +88 -0
  26. package/lib/components/Display.js +157 -0
  27. package/lib/components/Drawer.d.ts +27 -0
  28. package/lib/components/Drawer.js +58 -0
  29. package/lib/components/Feedback.d.ts +43 -0
  30. package/lib/components/Feedback.js +136 -0
  31. package/lib/components/Form.d.ts +92 -0
  32. package/lib/components/Form.js +196 -0
  33. package/lib/components/Money.d.ts +29 -0
  34. package/lib/components/Money.js +65 -0
  35. package/lib/components/Nav.d.ts +29 -0
  36. package/lib/components/Nav.js +65 -0
  37. package/lib/components/NumberStepper.d.ts +16 -0
  38. package/lib/components/NumberStepper.js +79 -0
  39. package/lib/components/Overlay.d.ts +54 -0
  40. package/lib/components/Overlay.js +147 -0
  41. package/lib/components/Rating.d.ts +18 -0
  42. package/lib/components/Rating.js +32 -0
  43. package/lib/components/Shell.d.ts +54 -0
  44. package/lib/components/Shell.js +99 -0
  45. package/lib/components/Surfaces.d.ts +64 -0
  46. package/lib/components/Surfaces.js +122 -0
  47. package/lib/components/Text.d.ts +14 -0
  48. package/lib/components/Text.js +31 -0
  49. package/lib/components/currency.d.ts +251 -0
  50. package/lib/components/currency.js +48 -0
  51. package/lib/glyphs.d.ts +2 -0
  52. package/lib/glyphs.js +7 -0
  53. package/lib/i18n/content.d.ts +1 -0
  54. package/lib/i18n/content.js +28 -0
  55. package/lib/i18n/en.d.ts +1 -0
  56. package/lib/i18n/en.js +124 -0
  57. package/lib/i18n/index.d.ts +64 -0
  58. package/lib/i18n/index.js +91 -0
  59. package/lib/i18n/screens.d.ts +1 -0
  60. package/lib/i18n/screens.js +2025 -0
  61. package/lib/icons.d.ts +18 -0
  62. package/lib/icons.js +400 -0
  63. package/lib/index.d.ts +25 -0
  64. package/lib/index.js +25 -0
  65. package/lib/lib/a11y.d.ts +4 -0
  66. package/lib/lib/a11y.js +8 -0
  67. package/lib/lib/digits.d.ts +3 -0
  68. package/lib/lib/digits.js +22 -0
  69. package/lib/lib/motion.d.ts +14 -0
  70. package/lib/lib/motion.js +47 -0
  71. package/lib/lib/tone.d.ts +9 -0
  72. package/lib/lib/tone.js +16 -0
  73. package/lib/qumra/NavIcon.d.ts +14 -0
  74. package/lib/qumra/NavIcon.js +17 -0
  75. package/lib/qumra/QumraIcon.d.ts +17 -0
  76. package/lib/qumra/QumraIcon.js +91 -0
  77. package/lib/qumra/data.generated.d.ts +3 -0
  78. package/lib/qumra/data.generated.js +146 -0
  79. package/lib/qumra/types.d.ts +5 -0
  80. package/lib/qumra/types.js +1 -0
  81. package/lib/theme/context.d.ts +31 -0
  82. package/lib/theme/context.js +46 -0
  83. package/lib/theme/fonts.d.ts +9 -0
  84. package/lib/theme/fonts.js +36 -0
  85. package/lib/theme/index.d.ts +4 -0
  86. package/lib/theme/index.js +4 -0
  87. package/lib/theme/shadows.d.ts +2 -0
  88. package/lib/theme/shadows.js +30 -0
  89. package/lib/theme/theme.d.ts +52 -0
  90. package/lib/theme/theme.js +78 -0
  91. package/lib/tokens/generated.d.ts +180 -0
  92. package/lib/tokens/generated.js +173 -0
  93. package/lib/tokens/index.d.ts +1 -0
  94. package/lib/tokens/index.js +1 -0
  95. package/package.json +59 -0
@@ -0,0 +1,251 @@
1
+ type Base = 'short' | 'word' | 'code' | 'sign';
2
+ export type SymbolStyle = Base | 'best';
3
+ export declare const CURRENCY: {
4
+ SAR: {
5
+ short: string;
6
+ word: string;
7
+ best: "sign";
8
+ code: string;
9
+ sign: "riyal";
10
+ name: string;
11
+ en: string;
12
+ decimals: number;
13
+ };
14
+ AED: {
15
+ short: string;
16
+ word: string;
17
+ best: "word";
18
+ code: string;
19
+ sign: null;
20
+ name: string;
21
+ en: string;
22
+ decimals: number;
23
+ };
24
+ QAR: {
25
+ short: string;
26
+ word: string;
27
+ best: "word";
28
+ code: string;
29
+ sign: null;
30
+ name: string;
31
+ en: string;
32
+ decimals: number;
33
+ };
34
+ KWD: {
35
+ short: string;
36
+ word: string;
37
+ best: "word";
38
+ code: string;
39
+ sign: null;
40
+ name: string;
41
+ en: string;
42
+ decimals: number;
43
+ };
44
+ BHD: {
45
+ short: string;
46
+ word: string;
47
+ best: "word";
48
+ code: string;
49
+ sign: null;
50
+ name: string;
51
+ en: string;
52
+ decimals: number;
53
+ };
54
+ OMR: {
55
+ short: string;
56
+ word: string;
57
+ best: "word";
58
+ code: string;
59
+ sign: null;
60
+ name: string;
61
+ en: string;
62
+ decimals: number;
63
+ };
64
+ EGP: {
65
+ short: string;
66
+ word: string;
67
+ best: "word";
68
+ code: string;
69
+ sign: "egp";
70
+ name: string;
71
+ en: string;
72
+ decimals: number;
73
+ };
74
+ JOD: {
75
+ short: string;
76
+ word: string;
77
+ best: "word";
78
+ code: string;
79
+ sign: null;
80
+ name: string;
81
+ en: string;
82
+ decimals: number;
83
+ };
84
+ IQD: {
85
+ short: string;
86
+ word: string;
87
+ best: "word";
88
+ code: string;
89
+ sign: null;
90
+ name: string;
91
+ en: string;
92
+ decimals: number;
93
+ };
94
+ LBP: {
95
+ short: string;
96
+ word: string;
97
+ best: "word";
98
+ code: string;
99
+ sign: null;
100
+ name: string;
101
+ en: string;
102
+ decimals: number;
103
+ };
104
+ SYP: {
105
+ short: string;
106
+ word: string;
107
+ best: "word";
108
+ code: string;
109
+ sign: null;
110
+ name: string;
111
+ en: string;
112
+ decimals: number;
113
+ };
114
+ YER: {
115
+ short: string;
116
+ word: string;
117
+ best: "word";
118
+ code: string;
119
+ sign: null;
120
+ name: string;
121
+ en: string;
122
+ decimals: number;
123
+ };
124
+ SDG: {
125
+ short: string;
126
+ word: string;
127
+ best: "word";
128
+ code: string;
129
+ sign: null;
130
+ name: string;
131
+ en: string;
132
+ decimals: number;
133
+ };
134
+ MAD: {
135
+ short: string;
136
+ word: string;
137
+ best: "word";
138
+ code: string;
139
+ sign: null;
140
+ name: string;
141
+ en: string;
142
+ decimals: number;
143
+ };
144
+ DZD: {
145
+ short: string;
146
+ word: string;
147
+ best: "word";
148
+ code: string;
149
+ sign: null;
150
+ name: string;
151
+ en: string;
152
+ decimals: number;
153
+ };
154
+ TND: {
155
+ short: string;
156
+ word: string;
157
+ best: "word";
158
+ code: string;
159
+ sign: null;
160
+ name: string;
161
+ en: string;
162
+ decimals: number;
163
+ };
164
+ LYD: {
165
+ short: string;
166
+ word: string;
167
+ best: "word";
168
+ code: string;
169
+ sign: null;
170
+ name: string;
171
+ en: string;
172
+ decimals: number;
173
+ };
174
+ MRU: {
175
+ short: string;
176
+ word: string;
177
+ best: "word";
178
+ code: string;
179
+ sign: null;
180
+ name: string;
181
+ en: string;
182
+ decimals: number;
183
+ };
184
+ SOS: {
185
+ short: string;
186
+ word: string;
187
+ best: "word";
188
+ code: string;
189
+ sign: null;
190
+ name: string;
191
+ en: string;
192
+ decimals: number;
193
+ };
194
+ DJF: {
195
+ short: string;
196
+ word: string;
197
+ best: "word";
198
+ code: string;
199
+ sign: null;
200
+ name: string;
201
+ en: string;
202
+ decimals: number;
203
+ };
204
+ KMF: {
205
+ short: string;
206
+ word: string;
207
+ best: "word";
208
+ code: string;
209
+ sign: null;
210
+ name: string;
211
+ en: string;
212
+ decimals: number;
213
+ };
214
+ USD: {
215
+ short: string;
216
+ word: string;
217
+ best: "sign";
218
+ code: string;
219
+ sign: "dollar";
220
+ name: string;
221
+ en: string;
222
+ decimals: number;
223
+ };
224
+ EUR: {
225
+ short: string;
226
+ word: string;
227
+ best: "sign";
228
+ code: string;
229
+ sign: "euro";
230
+ name: string;
231
+ en: string;
232
+ decimals: number;
233
+ };
234
+ GBP: {
235
+ short: string;
236
+ word: string;
237
+ best: "sign";
238
+ code: string;
239
+ sign: "pound";
240
+ name: string;
241
+ en: string;
242
+ decimals: number;
243
+ };
244
+ };
245
+ export type Currency = keyof typeof CURRENCY;
246
+ export declare function isCurrency(c?: string | null): c is Currency;
247
+ export declare function currencyName(c: Currency, en: boolean): string;
248
+ export declare function resolveStyle(style: SymbolStyle, c: (typeof CURRENCY)[Currency], en: boolean): Base;
249
+ export declare function unitOf(c: (typeof CURRENCY)[Currency], style: Base): string;
250
+ export declare const UNIT_RATIO: Record<Base, number>;
251
+ export {};
@@ -0,0 +1,48 @@
1
+ export const CURRENCY = {
2
+ SAR: { short: 'ر.س', word: 'ريال', best: 'sign', code: 'SAR', sign: 'riyal', name: 'ريال سعودي', en: 'Saudi riyals', decimals: 2 },
3
+ AED: { short: 'د.إ', word: 'درهم', best: 'word', code: 'AED', sign: null, name: 'درهم إماراتي', en: 'UAE dirhams', decimals: 2 },
4
+ QAR: { short: 'ر.ق', word: 'ريال', best: 'word', code: 'QAR', sign: null, name: 'ريال قطري', en: 'Qatari riyals', decimals: 2 },
5
+ KWD: { short: 'د.ك', word: 'دينار', best: 'word', code: 'KWD', sign: null, name: 'دينار كويتي', en: 'Kuwaiti dinars', decimals: 3 },
6
+ BHD: { short: 'د.ب', word: 'دينار', best: 'word', code: 'BHD', sign: null, name: 'دينار بحريني', en: 'Bahraini dinars', decimals: 3 },
7
+ OMR: { short: 'ر.ع', word: 'ريال', best: 'word', code: 'OMR', sign: null, name: 'ريال عماني', en: 'Omani riyals', decimals: 3 },
8
+ EGP: { short: 'ج.م', word: 'جنيه', best: 'word', code: 'EGP', sign: 'egp', name: 'جنيه مصري', en: 'Egyptian pounds', decimals: 2 },
9
+ JOD: { short: 'د.أ', word: 'دينار', best: 'word', code: 'JOD', sign: null, name: 'دينار أردني', en: 'Jordanian dinars', decimals: 3 },
10
+ IQD: { short: 'د.ع', word: 'دينار', best: 'word', code: 'IQD', sign: null, name: 'دينار عراقي', en: 'Iraqi dinars', decimals: 3 },
11
+ LBP: { short: 'ل.ل', word: 'ليرة', best: 'word', code: 'LBP', sign: null, name: 'ليرة لبنانية', en: 'Lebanese pounds', decimals: 2 },
12
+ SYP: { short: 'ل.س', word: 'ليرة', best: 'word', code: 'SYP', sign: null, name: 'ليرة سورية', en: 'Syrian pounds', decimals: 2 },
13
+ YER: { short: 'ر.ي', word: 'ريال', best: 'word', code: 'YER', sign: null, name: 'ريال يمني', en: 'Yemeni rials', decimals: 2 },
14
+ SDG: { short: 'ج.س', word: 'جنيه', best: 'word', code: 'SDG', sign: null, name: 'جنيه سوداني', en: 'Sudanese pounds', decimals: 2 },
15
+ MAD: { short: 'د.م', word: 'درهم', best: 'word', code: 'MAD', sign: null, name: 'درهم مغربي', en: 'Moroccan dirhams', decimals: 2 },
16
+ DZD: { short: 'د.ج', word: 'دينار', best: 'word', code: 'DZD', sign: null, name: 'دينار جزائري', en: 'Algerian dinars', decimals: 2 },
17
+ TND: { short: 'د.ت', word: 'دينار', best: 'word', code: 'TND', sign: null, name: 'دينار تونسي', en: 'Tunisian dinars', decimals: 3 },
18
+ LYD: { short: 'د.ل', word: 'دينار', best: 'word', code: 'LYD', sign: null, name: 'دينار ليبي', en: 'Libyan dinars', decimals: 3 },
19
+ MRU: { short: 'أ.م', word: 'أوقية', best: 'word', code: 'MRU', sign: null, name: 'أوقية موريتانية', en: 'Mauritanian ouguiya', decimals: 2 },
20
+ SOS: { short: 'ش.ص', word: 'شلن', best: 'word', code: 'SOS', sign: null, name: 'شلن صومالي', en: 'Somali shillings', decimals: 0 },
21
+ DJF: { short: 'ف.ج', word: 'فرنك', best: 'word', code: 'DJF', sign: null, name: 'فرنك جيبوتي', en: 'Djiboutian francs', decimals: 0 },
22
+ KMF: { short: 'ف.ق', word: 'فرنك', best: 'word', code: 'KMF', sign: null, name: 'فرنك قمري', en: 'Comorian francs', decimals: 0 },
23
+ USD: { short: '$', word: 'دولار', best: 'sign', code: 'USD', sign: 'dollar', name: 'دولار أمريكي', en: 'US dollars', decimals: 2 },
24
+ EUR: { short: '€', word: 'يورو', best: 'sign', code: 'EUR', sign: 'euro', name: 'يورو', en: 'euros', decimals: 2 },
25
+ GBP: { short: '£', word: 'إسترليني', best: 'sign', code: 'GBP', sign: 'pound', name: 'جنيه إسترليني', en: 'pounds sterling', decimals: 2 },
26
+ };
27
+ export function isCurrency(c) {
28
+ return Boolean(c && c in CURRENCY);
29
+ }
30
+ export function currencyName(c, en) {
31
+ return en ? CURRENCY[c].en : CURRENCY[c].name;
32
+ }
33
+ export function resolveStyle(style, c, en) {
34
+ if (style !== 'best')
35
+ return style;
36
+ if (!en)
37
+ return c.best;
38
+ return c.sign ? 'sign' : 'code';
39
+ }
40
+ export function unitOf(c, style) {
41
+ return style === 'code' ? c.code : style === 'word' ? c.word : c.short;
42
+ }
43
+ export const UNIT_RATIO = {
44
+ short: 0.82,
45
+ word: 0.86,
46
+ code: 0.78,
47
+ sign: 0.9,
48
+ };
@@ -0,0 +1,2 @@
1
+ import type { LucideIcon } from 'lucide-react-native';
2
+ export declare const WhatsappIcon: LucideIcon;
package/lib/glyphs.js ADDED
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import Svg, { Path } from 'react-native-svg';
3
+ const WHATSAPP_PATH = 'M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z';
4
+ function Whatsapp({ size = 24, color = 'currentColor', style }) {
5
+ return (_jsx(Svg, { width: size, height: size, viewBox: "0 0 24 24", style: style, children: _jsx(Path, { d: WHATSAPP_PATH, fill: color }) }));
6
+ }
7
+ export const WhatsappIcon = Whatsapp;
@@ -0,0 +1 @@
1
+ export declare const CONTENT_EN: Record<string, string>;
@@ -0,0 +1,28 @@
1
+ export const CONTENT_EN = {
2
+ "بيانات متجرك": "Your store details",
3
+ "أول انطباع لعميلك.": "Your customer’s first impression.",
4
+ "راجع البيانات": "Review details",
5
+ "أضف منتجاتك": "Add your products",
6
+ "ابدأ بواحد بس، والباقي يستنى.": "Just one to start — the rest can wait.",
7
+ "أضف منتج": "Add a product",
8
+ "فعّل طرق الدفع": "Turn on payments",
9
+ "بدونها لا يوجد دفع إلكتروني.": "No online payments without it.",
10
+ "اربط بوابة دفع": "Connect a gateway",
11
+ "اضبط الشحن": "Set up shipping",
12
+ "مناطق التوصيل وأسعارها.": "Delivery zones and rates.",
13
+ "انشر متجرك": "Publish your store",
14
+ "آخر خطوة قبل أول طلب.": "One step from your first order.",
15
+ "انشر الآن": "Publish now",
16
+ "صور منتجات تبيع": "Product photos that sell",
17
+ "قراءة 4 دقائق · أساسيات": "4 min read · Basics",
18
+ "أول حملة تسويقية لك": "Your first marketing campaign",
19
+ "قراءة 6 دقائق · تسويق": "6 min read · Marketing",
20
+ "سياسة استرجاع تكسب ثقة": "A return policy that builds trust",
21
+ "قراءة 3 دقائق · ثقة": "3 min read · Trust",
22
+ "شات مع الدعم": "Chat with support",
23
+ "مركز المساعدة": "Help centre",
24
+ "جولة بالفيديو": "Video tour",
25
+ "كم طلباً اليوم؟": "How many orders today?",
26
+ "منتجاتي التي أوشك مخزونها على النفاد": "Which products are low on stock?",
27
+ "كيف أزيد مبيعاتي؟": "How can I increase sales?",
28
+ };
@@ -0,0 +1 @@
1
+ export declare const EN: Record<string, string>;
package/lib/i18n/en.js ADDED
@@ -0,0 +1,124 @@
1
+ export const EN = {
2
+ "الرئيسية": "Home",
3
+ "البيع": "Sales",
4
+ "الكتالوج": "Catalog",
5
+ "المتجر": "Store",
6
+ "النمو": "Growth",
7
+ "المال": "Finance",
8
+ "التطبيقات": "Apps",
9
+ "الإعدادات": "Settings",
10
+ "إعدادات": "Settings",
11
+ "إعدادات المتجر": "Store settings",
12
+ "نظرة عامة": "Overview",
13
+ "الإشعارات": "Notifications",
14
+ "الطلبات": "Orders",
15
+ "العملاء": "Customers",
16
+ "السلات المتروكة": "Abandoned carts",
17
+ "الطلبات المفقودة": "Checkout leads",
18
+ "نقاط البيع": "Point of sale",
19
+ "موظفو نقاط البيع": "POS staff",
20
+ "المنتجات": "Products",
21
+ "المجموعات": "Collections",
22
+ "المخزون": "Inventory",
23
+ "المراجعات": "Reviews",
24
+ "الفلاتر": "Filters",
25
+ "الوسائط": "Media",
26
+ "الثيمات": "Themes",
27
+ "صفحات الهبوط": "Landing pages",
28
+ "الصفحات": "Pages",
29
+ "المقالات": "Articles",
30
+ "القوائم": "Menus",
31
+ "التحليلات": "Analytics",
32
+ "لوحة التحليلات": "Analytics board",
33
+ "التقارير": "Reports",
34
+ "استكشاف": "Explore",
35
+ "تتبع الحملات": "Campaign tracking",
36
+ "العروض": "Offers",
37
+ "الأسواق المستهدفة": "Target markets",
38
+ "المحفظة": "Wallet",
39
+ "إدارة المدفوعات": "Payments",
40
+ "الباقة والفواتير": "Plan & billing",
41
+ "سوق التطبيقات": "App market",
42
+ "تطبيقاتي": "My apps",
43
+ "هوية المتجر": "Store identity",
44
+ "نطاق المتجر": "Domain",
45
+ "الفروع": "Locations",
46
+ "الباقات": "Plans",
47
+ "إعدادات الدفع": "Checkout",
48
+ "إعدادات الشحن": "Shipping",
49
+ "الضرائب": "Taxes",
50
+ "إعدادات الإشعارات": "Notification settings",
51
+ "أحداث العملاء": "Customer events",
52
+ "اللغات": "Languages",
53
+ "السياسات": "Policies",
54
+ "الصلاحيات": "Permissions",
55
+ "أدوار نقاط البيع": "POS roles",
56
+ "مفاتيح الربط API": "API keys",
57
+ "البيانات المخصصة": "Custom data",
58
+ "ملخّص متجرك وآخر التنبيهات": "Your store summary and alerts",
59
+ "الطلبات والعملاء ونقاط البيع": "Orders, customers and POS",
60
+ "المنتجات والمخزون والوسائط": "Products, inventory and media",
61
+ "الثيمات والصفحات وواجهة المتجر": "Themes, pages and storefront",
62
+ "التحليلات والتقارير والعروض": "Analytics, reports and offers",
63
+ "المحفظة والمدفوعات والباقة": "Wallet, payments and plan",
64
+ "التكاملات والتطبيقات المثبّتة": "Integrations and installed apps",
65
+ "إعدادات المتجر والفريق": "Store and team settings",
66
+ "تعليم الكل كمقروء": "Mark all read",
67
+ "عرض كل الإشعارات": "View all notifications",
68
+ "طلب جديد ‎#4821": "New order #4821",
69
+ "سارة منصور — 742 ج.م · 3 منتجات": "Sara Mansour — EGP 742 · 3 items",
70
+ "مخزون منخفض": "Low stock",
71
+ "حذاء جلد بني — باقي 3 قطع": "Brown leather shoe — 3 left",
72
+ "اتحوّلت 1,280 ج.م لمحفظتك": "EGP 1,280 added to your wallet",
73
+ "تسوية بوابة الدفع": "Gateway settlement",
74
+ "تقييم جديد 5 نجوم": "New 5-star review",
75
+ "قميص كلاسيك أبيض": "Classic white shirt",
76
+ "من دقيقتين": "2 min ago",
77
+ "من 40 دقيقة": "40 min ago",
78
+ "من 3 ساعات": "3 hours ago",
79
+ "أمس": "Yesterday",
80
+ "اكتب رسالة…": "Type a message…",
81
+ "يكتب…": "Typing…",
82
+ "ابحث…": "Search…",
83
+ "ابحث في المنتجات والطلبات والصفحات…": "Search products, orders and pages…",
84
+ "منطقة المحتوى": "Content area",
85
+ "بحث في المنتجات والطلبات…": "Search products and orders…",
86
+ "الملف الشخصي": "Profile",
87
+ "إعدادات الحساب": "Account settings",
88
+ "الفريق والصلاحيات": "Team & permissions",
89
+ "مركز المساعدة": "Help center",
90
+ "تسجيل الخروج": "Sign out",
91
+ "المتجر الحالي": "Current store",
92
+ "سارة منصور — 742 ج.م": "Sara Mansour — EGP 742",
93
+ "المتاجر": "Stores",
94
+ "شهاب": "Shehab",
95
+ "متصل": "Online",
96
+ "أهلًا، أنا شهاب 👋\nاسألني عن مبيعاتك، طلباتك، أو مخزونك.": "Hi, I'm Shehab 👋\nAsk me about your sales, orders, or stock.",
97
+ "مبيعات اليوم": "Today's sales",
98
+ "أكثر المنتجات مبيعاً": "Best seller",
99
+ "المخزون الذي أوشك على النفاد": "Low stock items",
100
+ "مبيعات اليوم حتى الآن 4,820 ج.م من 18 طلباً — أعلى بـ12% من متوسط آخر 7 أيام.": "Today's sales so far are EGP 4,820 across 18 orders — 12% above the 7-day average.",
101
+ "قميص كلاسيك أبيض — 412 قطعة آخر 30 يوم بإيراد 110,416 ج.م.": "Classic white shirt — 412 units in the last 30 days, EGP 110,416 in revenue.",
102
+ "3 منتجات تحت حد التنبيه:\n• حذاء جلد بني — 3 قطع\n• محفظة جلد بنية — 4 قطع\n• شراب قطن — 5 قطع": "3 products below the alert threshold:\n• Brown leather shoe — 3 left\n• Brown leather wallet — 4 left\n• Cotton socks — 5 left",
103
+ "حسناً — أراجع بيانات متجرك الآن. اسألني عن المبيعات أو المخزون.": "On it — checking your store data. Ask me about sales or stock.",
104
+ "عبدالستار عبده": "Abdelsattar Abdo",
105
+ "باقة النمو": "Growth plan",
106
+ "باقة البداية": "Starter plan",
107
+ "متجر قمرة التجريبي": "Qumra demo store",
108
+ "التسويق بالعمولة": "Affiliates",
109
+ "محادثة جديدة": "New chat",
110
+ "إغلاق": "Close",
111
+ "إضافة": "Add",
112
+ "معاينة المتجر": "View store",
113
+ "إنشاء متجر جديد": "Create new store",
114
+ "منتج جديد": "New product",
115
+ "أضف منتج للكتالوج": "Add a product to the catalog",
116
+ "طلب يدوي": "Manual order",
117
+ "سجّل طلب من خارج المتجر": "Log an offline order",
118
+ "كوبون خصم": "Discount coupon",
119
+ "عرض أو خصم جديد": "New offer or discount",
120
+ "صفحة هبوط": "Landing page",
121
+ "صفحة بيع سريعة": "Quick selling page",
122
+ "مكتبة الوسائط": "Media library",
123
+ "المنتجات والمخزون والمراجعات": "Products, inventory and reviews",
124
+ };
@@ -0,0 +1,64 @@
1
+ import { EN } from './en';
2
+ import { CONTENT_EN } from './content';
3
+ import { SCREENS_EN } from './screens';
4
+ export type Lang = 'ar' | 'en';
5
+ export type Dir = 'rtl' | 'ltr';
6
+ export declare const DICT: Record<string, string>;
7
+ export { EN, CONTENT_EN, SCREENS_EN };
8
+ export declare const PHRASES: {
9
+ readonly searchPlaceholder: readonly ["بحث في المنتجات والطلبات…", "Search products and orders…"];
10
+ readonly pageSubtitle: readonly ["إدارة {page} في متجرك", "Manage {page} in your store"];
11
+ readonly heroTagReady: readonly ["جاهز للنمو", "Ready to grow"];
12
+ readonly heroTagStart: readonly ["خطواتك الأولى", "Getting started"];
13
+ readonly heroTitleReady: readonly ["أحسنت 🎉", "You’re all set 🎉"];
14
+ readonly heroTitleLeft: readonly ["قربت تخلص", "Almost there"];
15
+ readonly heroBodyReady: readonly ["متجرك جاهز لأول طلب.", "Your store is ready for its first order."];
16
+ readonly stepsTitle: readonly ["خطوات تجهيز متجرك", "Setup steps"];
17
+ readonly storeLive: readonly ["شغّال", "Live"];
18
+ readonly storeDraft: readonly ["مسوّدة", "Draft"];
19
+ readonly learnTitle: readonly ["تعلّم أثناء العمل", "Learn as you go"];
20
+ readonly helpTitle: readonly ["محتاج مساعدة؟", "Need a hand?"];
21
+ readonly helpBody: readonly ["بنرد خلال دقايق في مواعيد العمل.", "We answer within minutes during working hours."];
22
+ readonly shehabCardTitle: readonly ["تعثّرت في شيء؟ اسأل شهاب", "Stuck? ask Shehab"];
23
+ readonly shehabCardBody: readonly ["يجيبك بلغتك ويوصلك إلى المكان الذي تحتاجه.", "He answers in plain words and takes you where you need to go."];
24
+ readonly shehabCardCta: readonly ["اسأل شهاب", "Ask Shehab"];
25
+ readonly previewReady: readonly ["افتح متجرك", "Open your store"];
26
+ readonly previewBlockedTitle: readonly ["كمّل الخطوات الأول", "Finish setup first"];
27
+ readonly marketingCta: readonly ["أنشئ حملة تسويقية", "Create a campaign"];
28
+ readonly sharelabel: readonly ["شارك رابط المتجر", "Share store link"];
29
+ readonly copyLabel: readonly ["نسخ رابط المتجر", "Copy store link"];
30
+ readonly undoStep: readonly ["رجّعها باقية", "Mark as pending"];
31
+ readonly railLabel: readonly ["الأقسام الرئيسية", "Main sections"];
32
+ readonly userAccount: readonly ["حساب المستخدم", "User account"];
33
+ readonly toggleLang: readonly ["تغيير اللغة", "Change language"];
34
+ readonly themeDark: readonly ["الوضع الداكن", "Dark mode"];
35
+ readonly themeLight: readonly ["الوضع الفاتح", "Light mode"];
36
+ readonly skipToContent: readonly ["تخطّي إلى المحتوى", "Skip to content"];
37
+ readonly close: readonly ["إغلاق", "Close"];
38
+ readonly back: readonly ["رجوع", "Back"];
39
+ readonly loading: readonly ["جارٍ التحميل…", "Loading…"];
40
+ readonly required: readonly ["مطلوب", "Required"];
41
+ readonly optional: readonly ["اختياري", "Optional"];
42
+ readonly clear: readonly ["مسح", "Clear"];
43
+ readonly search: readonly ["ابحث…", "Search…"];
44
+ readonly noResults: readonly ["لا توجد نتائج", "No results"];
45
+ readonly selected: readonly ["محدَّد", "Selected"];
46
+ readonly increase: readonly ["زيادة", "Increase"];
47
+ readonly decrease: readonly ["نقصان", "Decrease"];
48
+ readonly markAllRead: readonly ["تعليم الكل كمقروء", "Mark all as read"];
49
+ readonly more: readonly ["المزيد", "More"];
50
+ readonly allSections: readonly ["كل الأقسام", "All sections"];
51
+ readonly currentStore: readonly ["المتجر الحالي", "Current store"];
52
+ readonly switchStore: readonly ["بدّل المتجر", "Switch store"];
53
+ readonly profile: readonly ["الملف الشخصي", "Profile"];
54
+ readonly notifications: readonly ["الإشعارات", "Notifications"];
55
+ readonly retry: readonly ["حاول تاني", "Try again"];
56
+ readonly pullToRefresh: readonly ["اسحب للتحديث", "Pull to refresh"];
57
+ };
58
+ export type PhraseKey = keyof typeof PHRASES;
59
+ export declare function phrase(key: PhraseKey, en: boolean, vars?: Record<string, string | number>): string;
60
+ export declare function stepsLeft(n: number, en: boolean): string;
61
+ export declare function heroBodyLeft(n: number, en: boolean): string;
62
+ export declare function previewBlockedMsg(n: number, en: boolean): string;
63
+ export declare function ofCount(done: number, total: number, en: boolean): string;
64
+ export declare function translate(ar: string, en: boolean): string;
@@ -0,0 +1,91 @@
1
+ import { EN } from './en';
2
+ import { CONTENT_EN } from './content';
3
+ import { SCREENS_EN } from './screens';
4
+ export const DICT = { ...EN, ...CONTENT_EN, ...SCREENS_EN };
5
+ export { EN, CONTENT_EN, SCREENS_EN };
6
+ export const PHRASES = {
7
+ searchPlaceholder: ['بحث في المنتجات والطلبات…', 'Search products and orders…'],
8
+ pageSubtitle: ['إدارة {page} في متجرك', 'Manage {page} in your store'],
9
+ heroTagReady: ['جاهز للنمو', 'Ready to grow'],
10
+ heroTagStart: ['خطواتك الأولى', 'Getting started'],
11
+ heroTitleReady: ['أحسنت 🎉', 'You’re all set 🎉'],
12
+ heroTitleLeft: ['قربت تخلص', 'Almost there'],
13
+ heroBodyReady: ['متجرك جاهز لأول طلب.', 'Your store is ready for its first order.'],
14
+ stepsTitle: ['خطوات تجهيز متجرك', 'Setup steps'],
15
+ storeLive: ['شغّال', 'Live'],
16
+ storeDraft: ['مسوّدة', 'Draft'],
17
+ learnTitle: ['تعلّم أثناء العمل', 'Learn as you go'],
18
+ helpTitle: ['محتاج مساعدة؟', 'Need a hand?'],
19
+ helpBody: ['بنرد خلال دقايق في مواعيد العمل.', 'We answer within minutes during working hours.'],
20
+ shehabCardTitle: ['تعثّرت في شيء؟ اسأل شهاب', 'Stuck? ask Shehab'],
21
+ shehabCardBody: [
22
+ 'يجيبك بلغتك ويوصلك إلى المكان الذي تحتاجه.',
23
+ 'He answers in plain words and takes you where you need to go.',
24
+ ],
25
+ shehabCardCta: ['اسأل شهاب', 'Ask Shehab'],
26
+ previewReady: ['افتح متجرك', 'Open your store'],
27
+ previewBlockedTitle: ['كمّل الخطوات الأول', 'Finish setup first'],
28
+ marketingCta: ['أنشئ حملة تسويقية', 'Create a campaign'],
29
+ sharelabel: ['شارك رابط المتجر', 'Share store link'],
30
+ copyLabel: ['نسخ رابط المتجر', 'Copy store link'],
31
+ undoStep: ['رجّعها باقية', 'Mark as pending'],
32
+ railLabel: ['الأقسام الرئيسية', 'Main sections'],
33
+ userAccount: ['حساب المستخدم', 'User account'],
34
+ toggleLang: ['تغيير اللغة', 'Change language'],
35
+ themeDark: ['الوضع الداكن', 'Dark mode'],
36
+ themeLight: ['الوضع الفاتح', 'Light mode'],
37
+ skipToContent: ['تخطّي إلى المحتوى', 'Skip to content'],
38
+ close: ['إغلاق', 'Close'],
39
+ back: ['رجوع', 'Back'],
40
+ loading: ['جارٍ التحميل…', 'Loading…'],
41
+ required: ['مطلوب', 'Required'],
42
+ optional: ['اختياري', 'Optional'],
43
+ clear: ['مسح', 'Clear'],
44
+ search: ['ابحث…', 'Search…'],
45
+ noResults: ['لا توجد نتائج', 'No results'],
46
+ selected: ['محدَّد', 'Selected'],
47
+ increase: ['زيادة', 'Increase'],
48
+ decrease: ['نقصان', 'Decrease'],
49
+ markAllRead: ['تعليم الكل كمقروء', 'Mark all as read'],
50
+ more: ['المزيد', 'More'],
51
+ allSections: ['كل الأقسام', 'All sections'],
52
+ currentStore: ['المتجر الحالي', 'Current store'],
53
+ switchStore: ['بدّل المتجر', 'Switch store'],
54
+ profile: ['الملف الشخصي', 'Profile'],
55
+ notifications: ['الإشعارات', 'Notifications'],
56
+ retry: ['حاول تاني', 'Try again'],
57
+ pullToRefresh: ['اسحب للتحديث', 'Pull to refresh'],
58
+ };
59
+ export function phrase(key, en, vars) {
60
+ let s = PHRASES[key][en ? 1 : 0];
61
+ if (vars)
62
+ for (const [k, v] of Object.entries(vars))
63
+ s = s.split(`{${k}}`).join(String(v));
64
+ return s;
65
+ }
66
+ export function stepsLeft(n, en) {
67
+ if (en)
68
+ return `${n} step${n === 1 ? '' : 's'}`;
69
+ if (n === 1)
70
+ return 'خطوة واحدة';
71
+ if (n === 2)
72
+ return 'خطوتين';
73
+ return `${n} خطوات`;
74
+ }
75
+ export function heroBodyLeft(n, en) {
76
+ return en
77
+ ? `${stepsLeft(n, true)} left before your store goes live.`
78
+ : `باقي ${stepsLeft(n, false)} ويبقى متجرك شغّال.`;
79
+ }
80
+ export function previewBlockedMsg(n, en) {
81
+ if (en)
82
+ return `Finish the remaining ${stepsLeft(n, true)} first — your store isn’t published yet.`;
83
+ const what = n === 1 ? 'الخطوة الأخيرة' : `الـ${n} خطوات الباقية`;
84
+ return `كمّل ${what} الأول — متجرك لسه مش منشور.`;
85
+ }
86
+ export function ofCount(done, total, en) {
87
+ return en ? `${done} of ${total}` : `${done} من ${total}`;
88
+ }
89
+ export function translate(ar, en) {
90
+ return en ? (DICT[ar] ?? ar) : ar;
91
+ }
@@ -0,0 +1 @@
1
+ export declare const SCREENS_EN: Record<string, string>;