@qumra/fanar 0.0.13 → 0.0.15
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.
- package/README.md +8 -115
- package/dist/ai.js +1 -1
- package/dist/charts.d.ts +392 -0
- package/dist/charts.js +2 -0
- package/dist/{chunk-NIEWNSOB.js → chunk-2WMPLPM5.js} +1 -1
- package/dist/chunk-4FZED2ZL.js +2 -0
- package/dist/chunk-FVOTYZMF.js +2 -0
- package/dist/chunk-HSB7TKCZ.js +2 -0
- package/dist/chunk-JC5JJOIS.js +2 -0
- package/dist/chunk-N7CZXHOG.js +2 -0
- package/dist/editor.js +1 -1
- package/dist/index.d.ts +177 -294
- package/dist/index.js +1 -1
- package/dist/notifications.js +1 -1
- package/package.json +11 -32
- package/dist/chunk-3EPEIAG2.js +0 -2
- package/dist/chunk-6DTSIOCB.js +0 -2
- package/dist/chunk-CTMW25W5.js +0 -2
- package/dist/chunk-K3TNXSD7.js +0 -2
- package/dist/native/ai.js +0 -1
- package/dist/native/chunk-LZHT3H7B.js +0 -1
- package/dist/native/chunk-RGKCDRSY.js +0 -2
- package/dist/native/editor.js +0 -1
- package/dist/native/index.js +0 -1
- package/dist/native/notifications.js +0 -1
- package/dist/native/orb.js +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -180,21 +180,6 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
|
180
180
|
}
|
|
181
181
|
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
182
182
|
|
|
183
|
-
/**
|
|
184
|
-
* Sets the display language for every Qumra component in the tree.
|
|
185
|
-
*
|
|
186
|
-
* ── نفس الاسم على المنصّتين ────────────────────────────────────────────
|
|
187
|
-
* النيتف مافيهوش `<html lang>`، فـ`lang.native.ts` بيمسك التبديل في
|
|
188
|
-
* مخزن جوّه الموديول. والويب مصدره الـDOM — فالتبديل هنا **بيكتب في
|
|
189
|
-
* المصدر نفسه** بدل ما يعمل مخزن تاني جنبه.
|
|
190
|
-
*
|
|
191
|
-
* والنتيجة إن `setLang('en-US')` بتشتغل زي بعضها على الاتنين، وإن الويب
|
|
192
|
-
* مافيهوش مصدرين للحقيقة يتخانقوا: `langStore` بيراقب السمة وبيعيد
|
|
193
|
-
* الرسم لوحده.
|
|
194
|
-
*
|
|
195
|
-
* `null` بترجّع للافتراضي (`ar-EG`).
|
|
196
|
-
*/
|
|
197
|
-
declare function setLang(tag: string | null): void;
|
|
198
183
|
/**
|
|
199
184
|
* لغة الصفحة كاملةً — لا `boolean`.
|
|
200
185
|
*
|
|
@@ -242,12 +227,14 @@ declare const TEXT: {
|
|
|
242
227
|
readonly search: readonly ["ابحث…", "Search…"];
|
|
243
228
|
readonly searchEverything: readonly ["ابحث في كل حاجة…", "Search everything…"];
|
|
244
229
|
readonly noResults: readonly ["مافيش نتايج", "No results"];
|
|
230
|
+
readonly noData: readonly ["لا بيانات بعد", "No data yet"];
|
|
245
231
|
readonly searchOrAdd: readonly ["ابحث أو أضف…", "Search or add…"];
|
|
246
232
|
readonly now: readonly ["الآن", "Now"];
|
|
247
233
|
readonly videoPlayer: readonly ["مشغّل الفيديو", "Video player"];
|
|
248
234
|
readonly rating: readonly ["التقييم", "Rating"];
|
|
249
235
|
readonly activeFilters: readonly ["الفلاتر المطبّقة:", "Active filters:"];
|
|
250
236
|
readonly clearAll: readonly ["مسح الكل", "Clear all"];
|
|
237
|
+
readonly remove: readonly ["إزالة", "Remove"];
|
|
251
238
|
readonly row: readonly ["صفّ", "row"];
|
|
252
239
|
readonly dropImages: readonly ["اسحب الصور هنا", "Drop images here"];
|
|
253
240
|
readonly chooseFromDevice: readonly ["اختر من الجهاز", "Choose from device"];
|
|
@@ -310,10 +297,9 @@ type UITextKey = keyof typeof TEXT;
|
|
|
310
297
|
* …
|
|
311
298
|
* aria-label={closeLabel ?? ui.close}
|
|
312
299
|
*/
|
|
313
|
-
declare function useUIText(): Record<"select" | "search" | "row" | "from" | "close" | "searchEverything" | "noResults" | "searchOrAdd" | "now" | "videoPlayer" | "rating" | "activeFilters" | "clearAll" | "dropImages" | "chooseFromDevice" | "previousPeriod" | "less" | "more" | "totalSales" | "netToYou" | "verifiedAccount" | "grabHint" | "notifications" | "dismiss" | "unread" | "noNotifications" | "noNotificationsDesc" | "markAllRead" | "viewAllNotifications" | "newNotifications" | "reloadPreview" | "previousMonth" | "nextMonth" | "whatIsThisNumber" | "explainToMe" | "clearSearch" | "alerts" | "whatIsThisOption" | "shouldBeHere" | "closeExplainer" | "cancelRecording" | "sendRecording" | "attachFile" | "recordVoice" | "playbackPosition" | "volume" | "hideSuggestions" | "askShehab" | "shehabThinking" | "undo" | "tryAnotherReply" | "helpfulReply" | "unhelpfulReply" | "aiDisclaimer" | "back10" | "forward10" | "playbackSpeed" | "arabic" | "seeMore" | "pictureInPicture", string>;
|
|
300
|
+
declare function useUIText(): Record<"select" | "search" | "row" | "from" | "close" | "searchEverything" | "noResults" | "noData" | "searchOrAdd" | "now" | "videoPlayer" | "rating" | "activeFilters" | "clearAll" | "remove" | "dropImages" | "chooseFromDevice" | "previousPeriod" | "less" | "more" | "totalSales" | "netToYou" | "verifiedAccount" | "grabHint" | "notifications" | "dismiss" | "unread" | "noNotifications" | "noNotificationsDesc" | "markAllRead" | "viewAllNotifications" | "newNotifications" | "reloadPreview" | "previousMonth" | "nextMonth" | "whatIsThisNumber" | "explainToMe" | "clearSearch" | "alerts" | "whatIsThisOption" | "shouldBeHere" | "closeExplainer" | "cancelRecording" | "sendRecording" | "attachFile" | "recordVoice" | "playbackPosition" | "volume" | "hideSuggestions" | "askShehab" | "shehabThinking" | "undo" | "tryAnotherReply" | "helpfulReply" | "unhelpfulReply" | "aiDisclaimer" | "back10" | "forward10" | "playbackSpeed" | "arabic" | "seeMore" | "pictureInPicture", string>;
|
|
314
301
|
|
|
315
302
|
type FieldSize = 'sm' | 'md' | 'lg';
|
|
316
|
-
|
|
317
303
|
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
318
304
|
label?: ReactNode;
|
|
319
305
|
/** فعل ثانوي جنب التسمية — «سجّل بالبريد بدل الهاتف» مثلاً */
|
|
@@ -390,30 +376,13 @@ declare function Switch({ checked, onCheckedChange, label, description, disabled
|
|
|
390
376
|
id?: string;
|
|
391
377
|
}): react.JSX.Element;
|
|
392
378
|
|
|
393
|
-
/**
|
|
394
|
-
* قواعد المبالغ ورموزها — **مشتركة بين الويب والنيتف**.
|
|
395
|
-
*
|
|
396
|
-
* التنسيق (`format`) واختيار الشكل (`resolve`) **منطق خالص**، ونسخهم
|
|
397
|
-
* معناه إن مبلغ يتكتب `١٬٢٥٠٫٥٠` على الويب و`1,250.50` على الموبايل.
|
|
398
|
-
* الشرح الكامل لكل قرار في `Money.tsx`.
|
|
399
|
-
*/
|
|
400
|
-
|
|
401
|
-
/** الشكل المعروض للوحدة */
|
|
402
|
-
type Base = 'short' | 'word' | 'code' | 'sign';
|
|
403
|
-
/**
|
|
404
|
-
* الشكل المطلوب — و`best` رأي المكتبة لكل عملة.
|
|
405
|
-
*
|
|
406
|
-
* `short` الاختصار العربي · `word` الكلمة · `code` رمز ISO ·
|
|
407
|
-
* `sign` الرمز المرسوم.
|
|
408
|
-
*/
|
|
409
|
-
type SymbolStyle = Base | 'best';
|
|
410
379
|
declare const CURRENCY: {
|
|
411
380
|
SAR: {
|
|
412
381
|
short: string;
|
|
413
382
|
word: string;
|
|
414
383
|
best: "sign";
|
|
415
384
|
code: string;
|
|
416
|
-
sign:
|
|
385
|
+
sign: react.JSX.Element;
|
|
417
386
|
name: string;
|
|
418
387
|
en: string;
|
|
419
388
|
decimals: number;
|
|
@@ -473,7 +442,7 @@ declare const CURRENCY: {
|
|
|
473
442
|
word: string;
|
|
474
443
|
best: "word";
|
|
475
444
|
code: string;
|
|
476
|
-
sign:
|
|
445
|
+
sign: react.JSX.Element;
|
|
477
446
|
name: string;
|
|
478
447
|
en: string;
|
|
479
448
|
decimals: number;
|
|
@@ -623,7 +592,7 @@ declare const CURRENCY: {
|
|
|
623
592
|
word: string;
|
|
624
593
|
best: "sign";
|
|
625
594
|
code: string;
|
|
626
|
-
sign:
|
|
595
|
+
sign: react.JSX.Element;
|
|
627
596
|
name: string;
|
|
628
597
|
en: string;
|
|
629
598
|
decimals: number;
|
|
@@ -633,7 +602,7 @@ declare const CURRENCY: {
|
|
|
633
602
|
word: string;
|
|
634
603
|
best: "sign";
|
|
635
604
|
code: string;
|
|
636
|
-
sign:
|
|
605
|
+
sign: react.JSX.Element;
|
|
637
606
|
name: string;
|
|
638
607
|
en: string;
|
|
639
608
|
decimals: number;
|
|
@@ -643,29 +612,65 @@ declare const CURRENCY: {
|
|
|
643
612
|
word: string;
|
|
644
613
|
best: "sign";
|
|
645
614
|
code: string;
|
|
646
|
-
sign:
|
|
615
|
+
sign: react.JSX.Element;
|
|
647
616
|
name: string;
|
|
648
617
|
en: string;
|
|
649
618
|
decimals: number;
|
|
650
619
|
};
|
|
651
620
|
};
|
|
621
|
+
/** The displayed unit form */
|
|
622
|
+
/** The explicit forms — each names one exact shape */
|
|
623
|
+
type Base = 'short' | 'word' | 'code' | 'sign';
|
|
624
|
+
/**
|
|
625
|
+
* The displayed unit form.
|
|
626
|
+
*
|
|
627
|
+
* `short` Arabic abbreviation · `word` the word · `code` the ISO code ·
|
|
628
|
+
* `sign` the graphic symbol · `best` whatever the library picks.
|
|
629
|
+
*
|
|
630
|
+
* ## `best` is an opinion, not an algorithm
|
|
631
|
+
*
|
|
632
|
+
* Every currency has a row in the table saying which form reads fastest **for
|
|
633
|
+
* that currency**, because the answer differs between them:
|
|
634
|
+
*
|
|
635
|
+
* - Saudi riyal → its symbol, because it has an official one its readers know
|
|
636
|
+
* - Pound, dinar, dirham → the word, because they have no official symbol
|
|
637
|
+
* and the abbreviation takes two characters before it means anything
|
|
638
|
+
* - Dollar, euro, sterling → their symbols, which read worldwide and are
|
|
639
|
+
* shorter than spelling them out
|
|
640
|
+
*
|
|
641
|
+
* Derive these from one rule ("symbol if there is one") and the Egyptian
|
|
642
|
+
* pound comes out as `£` — technically correct, and read as *sterling* in
|
|
643
|
+
* Egypt. A written opinion per currency is truer than a rule that looks
|
|
644
|
+
* tidier.
|
|
645
|
+
*
|
|
646
|
+
* ## In English
|
|
647
|
+
*
|
|
648
|
+
* `best` becomes the symbol where one exists and the ISO code otherwise. The
|
|
649
|
+
* Arabic word means nothing on an English page, and «جنيه» is not rendered as
|
|
650
|
+
* "pound" because that conflates it with sterling.
|
|
651
|
+
*/
|
|
652
|
+
type SymbolStyle = Base | 'best';
|
|
652
653
|
type Currency = keyof typeof CURRENCY;
|
|
654
|
+
/**
|
|
655
|
+
* Checks a currency code coming from the server before passing it to `Money`.
|
|
656
|
+
*
|
|
657
|
+
* ## Why a guard and not `as`
|
|
658
|
+
*
|
|
659
|
+
* `Money.currency` is a closed union and servers return `string`, so every
|
|
660
|
+
* caller was writing `code as Currency` — which **silences rather than
|
|
661
|
+
* checks**: an unknown code (`XYZ`, or an empty field) passes through and
|
|
662
|
+
* then fails at the table lookup.
|
|
663
|
+
*
|
|
664
|
+
* The guard turns the unknown into `undefined`, and `Money` then falls back
|
|
665
|
+
* to the store currency from `MoneyProvider` — which is the **right**
|
|
666
|
+
* behaviour: showing the amount in the dashboard's currency does less damage
|
|
667
|
+
* than showing it with the wrong symbol, or none.
|
|
668
|
+
*
|
|
669
|
+
* ```tsx
|
|
670
|
+
* <Money value={total} currency={isCurrency(code) ? code : undefined} />
|
|
671
|
+
* ```
|
|
672
|
+
*/
|
|
653
673
|
declare function isCurrency(c?: string | null): c is Currency;
|
|
654
|
-
declare const SIZE$1: {
|
|
655
|
-
readonly inherit: "";
|
|
656
|
-
readonly sm: "text-caption";
|
|
657
|
-
readonly md: "text-ui";
|
|
658
|
-
readonly lg: "text-body font-extrabold";
|
|
659
|
-
readonly xl: "text-h2 font-black";
|
|
660
|
-
};
|
|
661
|
-
declare const TONE: {
|
|
662
|
-
readonly inherit: "";
|
|
663
|
-
readonly muted: "text-muted";
|
|
664
|
-
readonly ink: "text-ink";
|
|
665
|
-
readonly green: "text-green";
|
|
666
|
-
readonly red: "text-red";
|
|
667
|
-
};
|
|
668
|
-
|
|
669
674
|
declare function MoneyProvider({ currency, locale, children, }: {
|
|
670
675
|
currency: Currency;
|
|
671
676
|
/**
|
|
@@ -686,40 +691,26 @@ declare function MoneyProvider({ currency, locale, children, }: {
|
|
|
686
691
|
* header, the "priced in …" line.
|
|
687
692
|
*/
|
|
688
693
|
declare function useCurrency(): Currency;
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
* survives being small because it is two characters, and the symbol survives
|
|
704
|
-
* because it is a single shape.
|
|
705
|
-
*
|
|
706
|
-
* ## And the letters are slightly tracked
|
|
707
|
-
*
|
|
708
|
-
* `tracking-wide` separates the word from the number visually without adding
|
|
709
|
-
* a space — so it reads as an attached unit, not as the next word in the line.
|
|
710
|
-
*/
|
|
711
|
-
/**
|
|
712
|
-
* Resolves `best` into an explicit form — the one place that holds the opinion.
|
|
713
|
-
*
|
|
714
|
-
* Kept out of `Money` because `currencySymbol` needs it too: a column header
|
|
715
|
-
* and a field suffix have to match what their own rows display.
|
|
716
|
-
*/
|
|
694
|
+
declare const SIZE: {
|
|
695
|
+
readonly inherit: "";
|
|
696
|
+
readonly sm: "text-caption";
|
|
697
|
+
readonly md: "text-ui";
|
|
698
|
+
readonly lg: "text-body font-extrabold";
|
|
699
|
+
readonly xl: "text-h2 font-black";
|
|
700
|
+
};
|
|
701
|
+
declare const TONE: {
|
|
702
|
+
readonly inherit: "";
|
|
703
|
+
readonly muted: "text-muted";
|
|
704
|
+
readonly ink: "text-ink";
|
|
705
|
+
readonly green: "text-green";
|
|
706
|
+
readonly red: "text-red";
|
|
707
|
+
};
|
|
717
708
|
interface MoneyProps {
|
|
718
709
|
/** The amount in major units — pounds, not piastres */
|
|
719
710
|
value: number;
|
|
720
711
|
/** A local override that beats the store currency — a dollar price in an Egyptian store */
|
|
721
712
|
currency?: Currency;
|
|
722
|
-
size?: keyof typeof SIZE
|
|
713
|
+
size?: keyof typeof SIZE;
|
|
723
714
|
/**
|
|
724
715
|
* The colour.
|
|
725
716
|
*
|
|
@@ -798,19 +789,14 @@ declare const currencyName: (c?: Currency) => string;
|
|
|
798
789
|
*/
|
|
799
790
|
declare function useCurrencySymbol(c?: Currency, style?: SymbolStyle): ReactNode;
|
|
800
791
|
|
|
801
|
-
|
|
802
|
-
* أنماط العدّاد — **مشتركة بين الويب والنيتف**.
|
|
803
|
-
* نفس سبب `Display.variants.ts`.
|
|
804
|
-
*/
|
|
805
|
-
type StepperSize = 'sm' | 'md' | 'lg';
|
|
806
|
-
|
|
792
|
+
type Size = 'sm' | 'md' | 'lg';
|
|
807
793
|
interface NumberStepperProps {
|
|
808
794
|
value: number;
|
|
809
795
|
onChange: (v: number) => void;
|
|
810
796
|
min?: number;
|
|
811
797
|
max?: number;
|
|
812
798
|
step?: number;
|
|
813
|
-
size?:
|
|
799
|
+
size?: Size;
|
|
814
800
|
/** وحدة صغيرة بجانب الرقم — «قطعة»، «كجم» */
|
|
815
801
|
unit?: ReactNode;
|
|
816
802
|
/**
|
|
@@ -828,6 +814,22 @@ interface NumberStepperProps {
|
|
|
828
814
|
}
|
|
829
815
|
declare function NumberStepper({ value, onChange, min, max, step, size, unit, onRemove, disabled, label, className, }: NumberStepperProps): react.JSX.Element;
|
|
830
816
|
|
|
817
|
+
/**
|
|
818
|
+
* علامة واتساب.
|
|
819
|
+
*
|
|
820
|
+
* ── لماذا مرسومة ولماذا مصمتة ───────────────────────────────────────────
|
|
821
|
+
* كانت `MessageCircle` من lucide، وهي فقاعة كلام عامّة. وفقاعة عامّة
|
|
822
|
+
* بجانب فقاعة الرسائل النصّيّة تجعل الزرّين متشابهين، والمستخدم يقرأ
|
|
823
|
+
* «رسالة» و«رسالة» فيتردّد قبل كلّ ضغطة.
|
|
824
|
+
*
|
|
825
|
+
* والعلامة مصمتة بين أيقونات محدّدة الخطوط عن قصد: علامة الخدمة تُعرف
|
|
826
|
+
* بشكلها لا بأسلوب المجموعة، وتحويلها إلى خطوط لتناسب البقيّة يفقدها
|
|
827
|
+
* الشيء الوحيد الذي تؤدّيه. والمسار من `simple-icons` — لا مرسوم
|
|
828
|
+
* بالتقدير، لأن علامة خدمة تُخمَّن تخرج علامةً أخرى.
|
|
829
|
+
*/
|
|
830
|
+
declare function WhatsAppIcon({ size, ...rest }: React.SVGProps<SVGSVGElement> & {
|
|
831
|
+
size?: number;
|
|
832
|
+
}): react.JSX.Element;
|
|
831
833
|
interface PhoneParts {
|
|
832
834
|
/** المفتاح الدوليّ بلا `+` — فارغ إن لم يُعرف */
|
|
833
835
|
dial: string;
|
|
@@ -855,44 +857,6 @@ declare function parsePhone(raw: string, defaultDial?: string): PhoneParts;
|
|
|
855
857
|
* و`spaces` لمن يريد الصورة الدوليّة الخام: `101 234 5678`.
|
|
856
858
|
*/
|
|
857
859
|
type PhoneFormat = 'parens' | 'spaces';
|
|
858
|
-
/**
|
|
859
|
-
* `inherit` لا مقاس ولا وزن ولا لون — للرقم داخل صفّ يحدّد تنسيقه
|
|
860
|
-
* أصلاً. والمكوّن هناك للاتّجاه والتقطيع لا للحجم.
|
|
861
|
-
*/
|
|
862
|
-
declare const SIZE: {
|
|
863
|
-
readonly inherit: "";
|
|
864
|
-
readonly sm: "text-caption";
|
|
865
|
-
readonly md: "text-ui";
|
|
866
|
-
};
|
|
867
|
-
type PhoneSize = keyof typeof SIZE;
|
|
868
|
-
|
|
869
|
-
/**
|
|
870
|
-
* علامة واتساب.
|
|
871
|
-
*
|
|
872
|
-
* ── لماذا مرسومة ولماذا مصمتة ───────────────────────────────────────────
|
|
873
|
-
* كانت `MessageCircle` من lucide، وهي فقاعة كلام عامّة. وفقاعة عامّة
|
|
874
|
-
* بجانب فقاعة الرسائل النصّيّة تجعل الزرّين متشابهين، والمستخدم يقرأ
|
|
875
|
-
* «رسالة» و«رسالة» فيتردّد قبل كلّ ضغطة.
|
|
876
|
-
*
|
|
877
|
-
* والعلامة مصمتة بين أيقونات محدّدة الخطوط عن قصد: علامة الخدمة تُعرف
|
|
878
|
-
* بشكلها لا بأسلوب المجموعة، وتحويلها إلى خطوط لتناسب البقيّة يفقدها
|
|
879
|
-
* الشيء الوحيد الذي تؤدّيه. والمسار من `simple-icons` — لا مرسوم
|
|
880
|
-
* بالتقدير، لأن علامة خدمة تُخمَّن تخرج علامةً أخرى.
|
|
881
|
-
*/
|
|
882
|
-
declare function WhatsAppIcon({ size, ...rest }: React.SVGProps<SVGSVGElement> & {
|
|
883
|
-
size?: number;
|
|
884
|
-
}): react.JSX.Element;
|
|
885
|
-
/**
|
|
886
|
-
* قواعد التجميع لكل مفتاح دوليّ.
|
|
887
|
-
*
|
|
888
|
-
* المجموعات من الطول المحلّيّ **بعد** المفتاح وبعد نزع الصفر الوطنيّ:
|
|
889
|
-
* `+20 112 505 2692` محلّيّه `1125052692` فقاعدته `[3, 3, 4]` لا
|
|
890
|
-
* `[3, 4, 4]` — والفرق أن الصفر يُكتب في `01125052692` ولا يُكتب في
|
|
891
|
-
* الصورة الدوليّة، فمن يعدّه في القاعدة يُزيح كل مجموعة بعده.
|
|
892
|
-
*
|
|
893
|
-
* وما زاد على القاعدة يُجمَّع ثلاثات: أفضل من سطر متّصل، وأصدق من
|
|
894
|
-
* ادّعاء قاعدة بلد لا نعرفها.
|
|
895
|
-
*/
|
|
896
860
|
interface PhoneProps {
|
|
897
861
|
/** الرقم كما هو في البيانات — منسَّقاً أو خاماً */
|
|
898
862
|
value: string;
|
|
@@ -913,7 +877,7 @@ interface PhoneProps {
|
|
|
913
877
|
* تنسيقه أصلاً: سطر ثانٍ تحت اسم عميل، أو سطر عنوان فرع.
|
|
914
878
|
* والمكوّن هناك للاتّجاه والتقطيع لا للحجم.
|
|
915
879
|
*/
|
|
916
|
-
size?:
|
|
880
|
+
size?: 'inherit' | 'sm' | 'md';
|
|
917
881
|
className?: string;
|
|
918
882
|
}
|
|
919
883
|
/**
|
|
@@ -930,17 +894,6 @@ interface PhoneProps {
|
|
|
930
894
|
*/
|
|
931
895
|
declare function Phone({ value, defaultDial, format, mask, call, sms, whatsapp, size, className, }: PhoneProps): react.JSX.Element;
|
|
932
896
|
|
|
933
|
-
/**
|
|
934
|
-
* قواعد القيم التقنية وأنماطها — **مشتركة بين الويب والنيتف**.
|
|
935
|
-
*
|
|
936
|
-
* `normalizeHex` **منطق خالص** وبيتنادى من المكوّن ومن التطبيق —
|
|
937
|
-
* ونسخته معناها إن `#abc` بتتفكّ لستّ خانات في منصّة وتفضل تلاتة في
|
|
938
|
-
* التانية.
|
|
939
|
-
*/
|
|
940
|
-
type TechnicalKind = 'hex' | 'url' | 'slug' | 'code' | 'id';
|
|
941
|
-
/** يرجّع `#RRGGBB` بحروف كبيرة، أو `null` لو القيمة ليست لوناً بعد */
|
|
942
|
-
declare function normalizeHex(input: string): string | null;
|
|
943
|
-
|
|
944
897
|
/**
|
|
945
898
|
* القيم التقنية داخل واجهة عربية.
|
|
946
899
|
*
|
|
@@ -962,6 +915,7 @@ declare function normalizeHex(input: string): string | null;
|
|
|
962
915
|
* `[dir=rtl]_&` لا `rtl:` — لأن `dir="ltr"` موضوع على العنصر نفسه،
|
|
963
916
|
* فسمة `rtl:` لن تنطبق عليه أبداً؛ والاستعلام لا بدّ أن يسأل عن **جدّه**.
|
|
964
917
|
*/
|
|
918
|
+
type TechnicalKind = 'hex' | 'url' | 'slug' | 'code' | 'id';
|
|
965
919
|
interface TechnicalInputProps extends Omit<InputProps, 'numeric' | 'type' | 'dir'> {
|
|
966
920
|
/** نوع القيمة — يضبط لوحة المفاتيح والتلميح فقط، لا يفرض تحقّقاً */
|
|
967
921
|
kind?: TechnicalKind;
|
|
@@ -995,6 +949,8 @@ declare function ColorField({ label, note, value, onChange, disabled, id: idProp
|
|
|
995
949
|
disabled?: boolean;
|
|
996
950
|
id?: string;
|
|
997
951
|
}): react.JSX.Element;
|
|
952
|
+
/** يرجّع `#RRGGBB` بحروف كبيرة، أو `null` لو القيمة ليست لوناً بعد */
|
|
953
|
+
declare function normalizeHex(input: string): string | null;
|
|
998
954
|
|
|
999
955
|
interface Product3DViewerProps {
|
|
1000
956
|
/** رابط الموديل — GLB أو GLTF */
|
|
@@ -1038,7 +994,6 @@ interface TabItem {
|
|
|
1038
994
|
count?: number;
|
|
1039
995
|
icon?: ComponentType<{
|
|
1040
996
|
size?: number;
|
|
1041
|
-
color?: string;
|
|
1042
997
|
}>;
|
|
1043
998
|
}
|
|
1044
999
|
/**
|
|
@@ -1076,23 +1031,6 @@ declare function FilterChips({ chips, onClearAll, label, clearAllLabel, }: {
|
|
|
1076
1031
|
clearAllLabel?: string;
|
|
1077
1032
|
}): react.JSX.Element | null;
|
|
1078
1033
|
|
|
1079
|
-
/**
|
|
1080
|
-
* أنماط الأسطح — **مشتركة بين الويب والنيتف**.
|
|
1081
|
-
* نفس سبب `Display.variants.ts`.
|
|
1082
|
-
*
|
|
1083
|
-
* ── واللي بيخصّ الويب مفصول صراحةً ───────────────────────────────────────
|
|
1084
|
-
* التموضع الثابت (`fixed inset-0 z-50`) والتبلير والحركات كلها بتخصّ
|
|
1085
|
-
* المتصفّح — RN بيرسم الأسطح جوّه `<Modal>` وهو بيتكفّل بالطبقة. الثوابت
|
|
1086
|
-
* اللي فيها `WEB` في اسمها هي دي.
|
|
1087
|
-
*/
|
|
1088
|
-
|
|
1089
|
-
declare const MODAL_WIDTHS: {
|
|
1090
|
-
readonly sm: "max-w-md";
|
|
1091
|
-
readonly md: "max-w-xl";
|
|
1092
|
-
readonly lg: "max-w-3xl";
|
|
1093
|
-
};
|
|
1094
|
-
type ModalSize = keyof typeof MODAL_WIDTHS;
|
|
1095
|
-
|
|
1096
1034
|
/**
|
|
1097
1035
|
* الـaction sheet — كل حاجة بتطلع من تحت على الموبايل.
|
|
1098
1036
|
*
|
|
@@ -1116,7 +1054,7 @@ declare function Modal({ open, title, description, onClose, footer, children, si
|
|
|
1116
1054
|
onClose: () => void;
|
|
1117
1055
|
footer?: ReactNode;
|
|
1118
1056
|
children?: ReactNode;
|
|
1119
|
-
size?:
|
|
1057
|
+
size?: 'sm' | 'md' | 'lg';
|
|
1120
1058
|
closeLabel?: string;
|
|
1121
1059
|
}): react.JSX.Element | null;
|
|
1122
1060
|
/** بيفتح من inline-end — الشمال في العربي واليمين في الإنجليزي، لوحده */
|
|
@@ -1149,20 +1087,13 @@ declare function Toast({ children, action, icon, }: {
|
|
|
1149
1087
|
declare function EmptyState({ icon: Icon, title, description, action, }: {
|
|
1150
1088
|
icon?: ComponentType<{
|
|
1151
1089
|
size?: number;
|
|
1152
|
-
color?: string;
|
|
1153
1090
|
}>;
|
|
1154
1091
|
title: ReactNode;
|
|
1155
1092
|
description?: ReactNode;
|
|
1156
1093
|
action?: ReactNode;
|
|
1157
1094
|
}): react.JSX.Element;
|
|
1158
1095
|
|
|
1159
|
-
/**
|
|
1160
|
-
* أنماط التوستات والتلميحة — **مشتركة بين الويب والنيتف**.
|
|
1161
|
-
* نفس سبب `Display.variants.ts`.
|
|
1162
|
-
*/
|
|
1163
|
-
|
|
1164
1096
|
type ToastTone = Extract<Tone, 'brand' | 'green' | 'amber' | 'red'> | 'neutral';
|
|
1165
|
-
|
|
1166
1097
|
interface ToastItem {
|
|
1167
1098
|
id: number;
|
|
1168
1099
|
tone: ToastTone;
|
|
@@ -1246,15 +1177,6 @@ declare function Tooltip({ content, children, side, }: {
|
|
|
1246
1177
|
side?: 'top' | 'bottom';
|
|
1247
1178
|
}): react.JSX.Element;
|
|
1248
1179
|
|
|
1249
|
-
/**
|
|
1250
|
-
* أنماط القوايم وفلترتها — **مشتركة بين الويب والنيتف**.
|
|
1251
|
-
*
|
|
1252
|
-
* القاعدة اللي المكتبة الأصلية بتقولها في قسم ٠٣:
|
|
1253
|
-
* أقل من ٦ خيارات → أزرار مجزّأة (`Tabs variant="segmented"`)
|
|
1254
|
-
* ٦ لـ١٥ خيار → `Dropdown` من غير بحث
|
|
1255
|
-
* أكتر من ١٥ → `Combobox` ببحث
|
|
1256
|
-
*/
|
|
1257
|
-
|
|
1258
1180
|
interface Option {
|
|
1259
1181
|
value: string;
|
|
1260
1182
|
label: string;
|
|
@@ -1263,15 +1185,6 @@ interface Option {
|
|
|
1263
1185
|
icon?: ReactNode;
|
|
1264
1186
|
disabled?: boolean;
|
|
1265
1187
|
}
|
|
1266
|
-
interface CommandItem {
|
|
1267
|
-
id: string;
|
|
1268
|
-
title: string;
|
|
1269
|
-
meta?: string;
|
|
1270
|
-
icon?: ReactNode;
|
|
1271
|
-
group: string;
|
|
1272
|
-
onRun?: () => void;
|
|
1273
|
-
}
|
|
1274
|
-
|
|
1275
1188
|
declare function Dropdown({ label, value, onChange, options, placeholder, className, }: {
|
|
1276
1189
|
label?: ReactNode;
|
|
1277
1190
|
value: string | null;
|
|
@@ -1305,6 +1218,14 @@ declare function MultiSelect({ label, values, onChange, options, placeholder, cr
|
|
|
1305
1218
|
onCreate?: (query: string) => void;
|
|
1306
1219
|
className?: string;
|
|
1307
1220
|
}): react.JSX.Element;
|
|
1221
|
+
interface CommandItem {
|
|
1222
|
+
id: string;
|
|
1223
|
+
title: string;
|
|
1224
|
+
meta?: string;
|
|
1225
|
+
icon?: ReactNode;
|
|
1226
|
+
group: string;
|
|
1227
|
+
onRun?: () => void;
|
|
1228
|
+
}
|
|
1308
1229
|
/**
|
|
1309
1230
|
* لوحة الأوامر — ⌘K.
|
|
1310
1231
|
*
|
|
@@ -1325,7 +1246,6 @@ interface AccordionItem {
|
|
|
1325
1246
|
description?: ReactNode;
|
|
1326
1247
|
icon?: ComponentType<{
|
|
1327
1248
|
size?: number;
|
|
1328
|
-
color?: string;
|
|
1329
1249
|
}>;
|
|
1330
1250
|
children: ReactNode;
|
|
1331
1251
|
}
|
|
@@ -1478,7 +1398,6 @@ declare function presets(today: Date): {
|
|
|
1478
1398
|
label: string;
|
|
1479
1399
|
range: Range;
|
|
1480
1400
|
}[];
|
|
1481
|
-
|
|
1482
1401
|
declare function DateRangePicker({ value, onChange, month, onMonthChange, today, className, }: {
|
|
1483
1402
|
value: Range;
|
|
1484
1403
|
onChange: (range: Range) => void;
|
|
@@ -1490,10 +1409,6 @@ declare function DateRangePicker({ value, onChange, month, onMonthChange, today,
|
|
|
1490
1409
|
className?: string;
|
|
1491
1410
|
}): react.JSX.Element;
|
|
1492
1411
|
|
|
1493
|
-
/**
|
|
1494
|
-
* أنماط الرفع وصيغته — **مشتركة بين الويب والنيتف**.
|
|
1495
|
-
* نفس سبب `Display.variants.ts`.
|
|
1496
|
-
*/
|
|
1497
1412
|
type UploadState = 'uploading' | 'done' | 'rejected';
|
|
1498
1413
|
interface UploadFile {
|
|
1499
1414
|
id: string;
|
|
@@ -1505,11 +1420,10 @@ interface UploadFile {
|
|
|
1505
1420
|
progress?: number;
|
|
1506
1421
|
/** سبب الرفض — لازم يتكتب، «فشل» لوحدها مش معلومة */
|
|
1507
1422
|
error?: string;
|
|
1508
|
-
/** رابط معاينة
|
|
1423
|
+
/** رابط معاينة (object URL أو data URI) */
|
|
1509
1424
|
preview?: string;
|
|
1510
1425
|
}
|
|
1511
1426
|
declare function formatBytes(bytes: number): string;
|
|
1512
|
-
|
|
1513
1427
|
declare function Dropzone({ onFiles, accept, multiple, disabled, title, hint, buttonLabel, className, }: {
|
|
1514
1428
|
onFiles: (files: File[]) => void;
|
|
1515
1429
|
accept?: string;
|
|
@@ -1731,8 +1645,6 @@ interface BrowserFrameProps {
|
|
|
1731
1645
|
}
|
|
1732
1646
|
declare function BrowserFrame({ url, device, tab, nav, loading, contentWidth, onScale, onReload, children, className, }: BrowserFrameProps): react.JSX.Element;
|
|
1733
1647
|
|
|
1734
|
-
type ShareTone = 'brand' | 'amber' | 'red' | 'muted';
|
|
1735
|
-
|
|
1736
1648
|
interface BarSeries {
|
|
1737
1649
|
label: string;
|
|
1738
1650
|
values: number[];
|
|
@@ -1744,12 +1656,32 @@ interface BarSeries {
|
|
|
1744
1656
|
*
|
|
1745
1657
|
* السلسلتان جنب بعضهما لا فوق بعض: التكديس يخفي أن أحدهما تراجع
|
|
1746
1658
|
* حين يرتفع الآخر.
|
|
1659
|
+
*
|
|
1660
|
+
* ── ⚠️ كان رسماً يُنظر إليه، فصار رسماً يُقرأ منه ────────────────────────
|
|
1661
|
+
* النسخة الأولى كانت أعمدةً بلا محور ولا أرقام: تقول «الخميس أطول من
|
|
1662
|
+
* الاثنين» ولا تقول بكم. والفرق بين ٩٥ و٦٦ قرارٌ يُتّخذ، وبين ٩٥ و٩٣
|
|
1663
|
+
* لا شيء — والعين لا تفرّق بينهما في عمودين.
|
|
1664
|
+
*
|
|
1665
|
+
* فأُضيف ثلاثة:
|
|
1666
|
+
* ١. **علامات المحور** — الأعلى والنصف والصفر، كما في `TrendChart`.
|
|
1667
|
+
* ٢. **الرقم فوق كل عمود** حين تكون سلسلةً واحدة؛ فإن كانتا سلسلتين
|
|
1668
|
+
* فالأرقام ستّة عشر رقماً في صفّ فتُقرأ ضجيجاً، ومكانها التلميح.
|
|
1669
|
+
* ٣. **عمودٌ نشط** بالمؤشّر أو بالأسهم، وتلميحٌ يعرض كل السلاسل عنده.
|
|
1670
|
+
*
|
|
1671
|
+
* والتنقّل بلوحة المفاتيح ليس زينة: القيم هنا هي كلّ ما في الرسم، ومن لا
|
|
1672
|
+
* يستعمل الفأرة لا يصل إليها بغيره.
|
|
1747
1673
|
*/
|
|
1748
|
-
declare function BarChart({ labels, series, height, formatValue, className, }: {
|
|
1674
|
+
declare function BarChart({ labels, series, height, formatValue, showValues, className, }: {
|
|
1749
1675
|
labels: string[];
|
|
1750
1676
|
series: BarSeries[];
|
|
1751
1677
|
height?: number;
|
|
1752
1678
|
formatValue?: (v: number) => string;
|
|
1679
|
+
/**
|
|
1680
|
+
* الرقم فوق كل عمود.
|
|
1681
|
+
*
|
|
1682
|
+
* افتراضه: نعم للسلسلة الواحدة، لا لأكثر — والشرح فوق.
|
|
1683
|
+
*/
|
|
1684
|
+
showValues?: boolean;
|
|
1753
1685
|
className?: string;
|
|
1754
1686
|
}): react.JSX.Element;
|
|
1755
1687
|
/**
|
|
@@ -1829,7 +1761,7 @@ interface ShareItem {
|
|
|
1829
1761
|
*/
|
|
1830
1762
|
trailing?: ReactNode;
|
|
1831
1763
|
/** لون الشريط — الافتراضي لون العلامة */
|
|
1832
|
-
tone?:
|
|
1764
|
+
tone?: 'brand' | 'amber' | 'red' | 'muted';
|
|
1833
1765
|
}
|
|
1834
1766
|
/**
|
|
1835
1767
|
* قائمة بحصص — للفئات المرتّبة (المصادر، المنتجات، المدن).
|
|
@@ -1867,14 +1799,6 @@ declare function ShareList({ items, total, layout, showPercent, labelWidth, form
|
|
|
1867
1799
|
className?: string;
|
|
1868
1800
|
}): react.JSX.Element;
|
|
1869
1801
|
|
|
1870
|
-
/**
|
|
1871
|
-
* حسابات رسوم التجارة وأنماطها — **مشتركة بين الويب والنيتف**.
|
|
1872
|
-
*
|
|
1873
|
-
* الحسابات هنا **إجابات على أسئلة تاجر**، لا أشكال: «أكبر خصم فين؟»
|
|
1874
|
-
* و«كام صنف بيعمل ٨٠٪؟» و«المخزن هيكفي كام يوم؟». نسخها معناها إن
|
|
1875
|
-
* الرقم اللي التاجر بيتصرّف على أساسه يفرق بين شاشة وشاشة.
|
|
1876
|
-
*/
|
|
1877
|
-
|
|
1878
1802
|
interface WaterfallStep {
|
|
1879
1803
|
key: string;
|
|
1880
1804
|
label: ReactNode;
|
|
@@ -1883,36 +1807,6 @@ interface WaterfallStep {
|
|
|
1883
1807
|
/** سطر يشرح الخصم — «٤٪ عمولة بوّابة الدفع» */
|
|
1884
1808
|
meta?: ReactNode;
|
|
1885
1809
|
}
|
|
1886
|
-
interface ParetoItem {
|
|
1887
|
-
key: string;
|
|
1888
|
-
label: ReactNode;
|
|
1889
|
-
value: number;
|
|
1890
|
-
}
|
|
1891
|
-
interface RunwayItem {
|
|
1892
|
-
key: string;
|
|
1893
|
-
label: ReactNode;
|
|
1894
|
-
/** ما في المخزن الآن */
|
|
1895
|
-
stock: number;
|
|
1896
|
-
/** متوسّط ما يُباع في اليوم */
|
|
1897
|
-
perDay: number;
|
|
1898
|
-
}
|
|
1899
|
-
|
|
1900
|
-
/**
|
|
1901
|
-
* الشلّال — من إجمالي البيع إلى ما يصل جيبك.
|
|
1902
|
-
*
|
|
1903
|
-
* ── لماذا هو أهمّ رسم للتاجر ───────────────────────────────────────────
|
|
1904
|
-
* التاجر يعرف كم باع ولا يعرف كم كسب. «بعت ٧١ ألفاً» رقم يُقال، و«وصلك
|
|
1905
|
-
* ٢٧» رقم يُتصرّف بناءً عليه — والفرق بينهما هو الشلّال كلّه.
|
|
1906
|
-
*
|
|
1907
|
-
* ── ولماذا مدرّج لا أعمدة ──────────────────────────────────────────────
|
|
1908
|
-
* كل خطوة تبدأ من حيث انتهت السابقة، فالنزول **يُرى** لا يُحسب. الأعمدة
|
|
1909
|
-
* المستقلّة تجعل العين تطرح الأرقام بنفسها، وهذا بالضبط ما جاء الرسم
|
|
1910
|
-
* ليوفّره.
|
|
1911
|
-
*
|
|
1912
|
-
* ── وأكبر خصم يُعلَّم ──────────────────────────────────────────────────
|
|
1913
|
-
* كما في `FunnelChart`: البند الذي يأكل أكثر من غيره هو المكان الوحيد
|
|
1914
|
-
* الذي يستحقّ عملاً هذا الشهر، والباقي يبقى محايداً حتى لا يزاحمه.
|
|
1915
|
-
*/
|
|
1916
1810
|
declare function WaterfallChart({ total, steps, totalLabel, netLabel, formatValue, className, }: {
|
|
1917
1811
|
/** نقطة البداية — إجمالي المبيعات قبل أي خصم */
|
|
1918
1812
|
total: number;
|
|
@@ -1941,6 +1835,11 @@ pace, label, formatValue, className, }: {
|
|
|
1941
1835
|
formatValue?: (v: number) => string;
|
|
1942
1836
|
className?: string;
|
|
1943
1837
|
}): react.JSX.Element;
|
|
1838
|
+
interface ParetoItem {
|
|
1839
|
+
key: string;
|
|
1840
|
+
label: ReactNode;
|
|
1841
|
+
value: number;
|
|
1842
|
+
}
|
|
1944
1843
|
/**
|
|
1945
1844
|
* كم صنفاً يصنع معظم المبيعات.
|
|
1946
1845
|
*
|
|
@@ -1959,6 +1858,14 @@ declare function ParetoChart({ items, height, threshold, formatValue, className,
|
|
|
1959
1858
|
formatValue?: (v: number) => string;
|
|
1960
1859
|
className?: string;
|
|
1961
1860
|
}): react.JSX.Element;
|
|
1861
|
+
interface RunwayItem {
|
|
1862
|
+
key: string;
|
|
1863
|
+
label: ReactNode;
|
|
1864
|
+
/** ما في المخزن الآن */
|
|
1865
|
+
stock: number;
|
|
1866
|
+
/** متوسّط ما يُباع في اليوم */
|
|
1867
|
+
perDay: number;
|
|
1868
|
+
}
|
|
1962
1869
|
/**
|
|
1963
1870
|
* كم يوماً يكفي المخزون.
|
|
1964
1871
|
*
|
|
@@ -2116,26 +2023,6 @@ declare function useAudioLevel(ref: RefObject<HTMLMediaElement | null>, { bands,
|
|
|
2116
2023
|
}): AudioLevel;
|
|
2117
2024
|
|
|
2118
2025
|
type ProviderLevel = 1 | 2 | 3;
|
|
2119
|
-
declare const PROVIDER_LEVEL_LABEL: Record<ProviderLevel, string>;
|
|
2120
|
-
declare const PROVIDER_LEVEL_LABEL_EN: Record<ProviderLevel, string>;
|
|
2121
|
-
/**
|
|
2122
|
-
* المقاسين.
|
|
2123
|
-
*
|
|
2124
|
-
* `sm` أربعة وعشرين — وده **حدّ الهدف اللمسي** لا رقم مختار. الشارة
|
|
2125
|
-
* بتاخد تركيز، واللي بياخد تركيز بيتضغط عليه. وعلى الموبايل ده أهمّ لا أقلّ.
|
|
2126
|
-
*/
|
|
2127
|
-
declare const SIZES: {
|
|
2128
|
-
readonly sm: {
|
|
2129
|
-
readonly box: "size-6";
|
|
2130
|
-
readonly mark: 14;
|
|
2131
|
-
};
|
|
2132
|
-
readonly md: {
|
|
2133
|
-
readonly box: "size-7";
|
|
2134
|
-
readonly mark: 16;
|
|
2135
|
-
};
|
|
2136
|
-
};
|
|
2137
|
-
type ProviderBadgeSize = keyof typeof SIZES;
|
|
2138
|
-
|
|
2139
2026
|
/**
|
|
2140
2027
|
* التسميات جوّه المكتبة لا في التطبيق.
|
|
2141
2028
|
*
|
|
@@ -2144,6 +2031,8 @@ type ProviderBadgeSize = keyof typeof SIZES;
|
|
|
2144
2031
|
* المكوّن زي أسماء العملات في `Money` بالظبط — وهنا هو **الاسم
|
|
2145
2032
|
* المتاح الوحيد**، فتفرّقه بيدّي شارتين مالهمش علاقة ببعض.
|
|
2146
2033
|
*/
|
|
2034
|
+
declare const PROVIDER_LEVEL_LABEL: Record<ProviderLevel, string>;
|
|
2035
|
+
declare const PROVIDER_LEVEL_LABEL_EN: Record<ProviderLevel, string>;
|
|
2147
2036
|
interface ProviderMarkProps {
|
|
2148
2037
|
level: ProviderLevel;
|
|
2149
2038
|
/** ضلع المربّع بالبكسل */
|
|
@@ -2156,6 +2045,23 @@ interface ProviderMarkProps {
|
|
|
2156
2045
|
* بلا `aria-label`: العلامة زينة جوّه `ProviderBadge` اللي بيحمل الاسم.
|
|
2157
2046
|
*/
|
|
2158
2047
|
declare function ProviderMark({ level, size, className }: ProviderMarkProps): react.JSX.Element;
|
|
2048
|
+
/**
|
|
2049
|
+
* المقاسين.
|
|
2050
|
+
*
|
|
2051
|
+
* `sm` أربعة وعشرين — وده **حدّ الهدف اللمسي** لا رقم مختار. الشارة
|
|
2052
|
+
* بتاخد تركيز (تحت)، واللي بياخد تركيز بيتضغط عليه.
|
|
2053
|
+
*/
|
|
2054
|
+
declare const SIZES: {
|
|
2055
|
+
readonly sm: {
|
|
2056
|
+
readonly box: "size-6";
|
|
2057
|
+
readonly mark: 14;
|
|
2058
|
+
};
|
|
2059
|
+
readonly md: {
|
|
2060
|
+
readonly box: "size-7";
|
|
2061
|
+
readonly mark: 16;
|
|
2062
|
+
};
|
|
2063
|
+
};
|
|
2064
|
+
type ProviderBadgeSize = keyof typeof SIZES;
|
|
2159
2065
|
interface ProviderBadgeProps {
|
|
2160
2066
|
level: ProviderLevel;
|
|
2161
2067
|
/**
|
|
@@ -2319,13 +2225,6 @@ declare function Coach({ id, asChild, children, }: {
|
|
|
2319
2225
|
children: ReactNode;
|
|
2320
2226
|
}): react.JSX.Element;
|
|
2321
2227
|
|
|
2322
|
-
/**
|
|
2323
|
-
* أنماط كروت الاختيار والسبارك‑لاين — **مشتركة بين الويب والنيتف**.
|
|
2324
|
-
* نفس سبب `Display.variants.ts`.
|
|
2325
|
-
*/
|
|
2326
|
-
|
|
2327
|
-
type SparkTone = 'brand' | 'green' | 'red' | 'muted';
|
|
2328
|
-
|
|
2329
2228
|
interface ChoiceOption {
|
|
2330
2229
|
value: string;
|
|
2331
2230
|
label: ReactNode;
|
|
@@ -2335,7 +2234,6 @@ interface ChoiceOption {
|
|
|
2335
2234
|
icon?: ComponentType<{
|
|
2336
2235
|
size?: number;
|
|
2337
2236
|
strokeWidth?: number;
|
|
2338
|
-
color?: string;
|
|
2339
2237
|
}>;
|
|
2340
2238
|
disabled?: boolean;
|
|
2341
2239
|
/** سبب التعطيل — «معطّل» من غير سبب بيسيب المستخدم واقف */
|
|
@@ -2392,45 +2290,30 @@ declare function ChoiceCards({ name, value, onChange, options, columns, hideMark
|
|
|
2392
2290
|
* و`preserveAspectRatio="none"` بيمطّ أفقياً. وعشان المطّ ده السُمك
|
|
2393
2291
|
* بيتحسب من الشاشة لا من المقاس (`vectorEffect`)، وإلا الخط بيرفع
|
|
2394
2292
|
* على الشاشة العريضة ويرفع أكتر على الضيقة.
|
|
2293
|
+
*
|
|
2294
|
+
* ── والقيمة تُقرأ بالمرور ───────────────────────────────────────────────
|
|
2295
|
+
* القاعدة فوق («مش يتقري منه قيمة») تبقى صحيحةً في **الشكل الساكن**:
|
|
2296
|
+
* مافيش محاور ولا أرقام مرسومة. لكن الخط اللي جوّه كرت لوحة بيجاوب
|
|
2297
|
+
* سؤالاً تانياً لمّا المؤشّر يقف عليه: «الجمعة كام؟» — والجواب ده كان
|
|
2298
|
+
* بيحتاج فتح شاشة تانية.
|
|
2299
|
+
*
|
|
2300
|
+
* فالمرور بيظهر نقطةً وفقاعةً بقيمة اليوم واسمه إن اتبعت `labels`.
|
|
2301
|
+
* والرسم بيفضل `aria-hidden` وجنبه قائمة `sr-only` بالقيم لمّا يكون
|
|
2302
|
+
* ليها أسماء — الشكل مايوصلش لقارئ الشاشة أصلاً.
|
|
2395
2303
|
*/
|
|
2396
|
-
declare function Sparkline({ values, width, height, tone, fluid, className, }: {
|
|
2304
|
+
declare function Sparkline({ values, width, height, tone, fluid, labels, formatValue, className, }: {
|
|
2397
2305
|
values: number[];
|
|
2398
2306
|
width?: number;
|
|
2399
2307
|
height?: number;
|
|
2400
|
-
tone?:
|
|
2308
|
+
tone?: 'brand' | 'green' | 'red' | 'muted';
|
|
2401
2309
|
/** يملا عرض الحاوية بدل المقاس الثابت — `width` بيبقى نسبة الرسم */
|
|
2402
2310
|
fluid?: boolean;
|
|
2311
|
+
/** اسم كل نقطة — بيظهر في الفقاعة وفي قائمة قارئ الشاشة */
|
|
2312
|
+
labels?: string[];
|
|
2313
|
+
formatValue?: (v: number) => string;
|
|
2403
2314
|
className?: string;
|
|
2404
2315
|
}): react.JSX.Element | null;
|
|
2405
2316
|
|
|
2406
|
-
/**
|
|
2407
|
-
* أنماط مكوّنات العرض — **مشتركة بين الويب والنيتف**.
|
|
2408
|
-
*
|
|
2409
|
-
* ══ ليه الملف ده موجود ═══════════════════════════════════════════════════
|
|
2410
|
-
* `buttonClasses` كانت في `lib.ts` من الأول، فـ`Button.tsx` و
|
|
2411
|
-
* `Button.native.tsx` بيوصلوا لنفس السلسلة بلا مجهود.
|
|
2412
|
-
*
|
|
2413
|
-
* باقي المكوّنات مكانتش كده: أنماط `Badge` و`Card` و`Progress` كانت
|
|
2414
|
-
* **مكتوبة جوّه `Display.tsx`** — وهي المكان الصح ما دام فيه منصّة واحدة.
|
|
2415
|
-
*
|
|
2416
|
-
* وأول ما بقى فيه اتنين، الكتابة جوّه المكوّن معناها **نسختين**: تغيير
|
|
2417
|
-
* حشوة الشارة بيتعمل مرتين، وأول مرة حد ينسى واحدة الشارة بتفرق بين
|
|
2418
|
-
* الويب والموبايل — من غير خطأ ولا تحذير.
|
|
2419
|
-
*
|
|
2420
|
-
* ودي بالظبط الحتة اللي الطلب اتكتب عشانها: «تعديل في التوكنز أو
|
|
2421
|
-
* الأنماط أو المقاسات يوصل لكل المنصّات من مصدر واحد».
|
|
2422
|
-
*
|
|
2423
|
-
* ── والملف ده مالوش React ────────────────────────────────────────────────
|
|
2424
|
-
* نصوص وخرايط وبس — زي `lib.ts` بالظبط. يعني بيعدّي حدّ RSC بلا
|
|
2425
|
-
* `"use client"`، والنيتف بياخده من غير ما يجرّ DOM.
|
|
2426
|
-
*
|
|
2427
|
-
* ── والقاعدة: أي نمط بيتشاف على المنصّتين مكانه هنا ─────────────────────
|
|
2428
|
-
* اللي بيفضل جوّه ملف المنصّة هو اللي **بيخصّها هي**: `overflow-clip`
|
|
2429
|
-
* بتاعة الويب مثلاً، أو تخطيط `<Modal>` بتاع RN.
|
|
2430
|
-
*/
|
|
2431
|
-
|
|
2432
|
-
type AvatarSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
2433
|
-
|
|
2434
2317
|
interface BadgeProps {
|
|
2435
2318
|
children: ReactNode;
|
|
2436
2319
|
tone?: Tone;
|
|
@@ -2447,6 +2330,7 @@ declare function Counter({ value, max }: {
|
|
|
2447
2330
|
value: number;
|
|
2448
2331
|
max?: number;
|
|
2449
2332
|
}): react.JSX.Element | null;
|
|
2333
|
+
type AvatarSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
2450
2334
|
declare function Avatar({ name, src, size, square, className, }: {
|
|
2451
2335
|
name: string;
|
|
2452
2336
|
src?: string;
|
|
@@ -2459,7 +2343,6 @@ interface StatCardProps {
|
|
|
2459
2343
|
icon?: ComponentType<{
|
|
2460
2344
|
size?: number;
|
|
2461
2345
|
strokeWidth?: number;
|
|
2462
|
-
color?: string;
|
|
2463
2346
|
}>;
|
|
2464
2347
|
tone?: Tone;
|
|
2465
2348
|
label: ReactNode;
|
|
@@ -2529,4 +2412,4 @@ declare function Skeleton({ variant, width, className, }: {
|
|
|
2529
2412
|
className?: string;
|
|
2530
2413
|
}): react.JSX.Element;
|
|
2531
2414
|
|
|
2532
|
-
export { ANIMATE_SCALE, Accordion, type AccordionItem, Alert, type Animation, type AudioLevel, AudioPlayer, type AudioPlayerProps, Avatar, type AvatarSize, Badge, type BadgeProps, BarChart, type BarSeries, BrowserFrame, type BrowserFrameProps, Button, type ButtonProps, ButtonSize, ButtonVariant, COLOR_SCALE, CONTAINER_SCALE, Card, CardHeader, Carousel, type CarouselProps, type Chapter, Checkbox, ChoiceCards, type ChoiceOption, type ChoiceProps, Coach, type CoachApi, type CoachAudio, type CoachHint, type CoachItem, type CoachLine, type CoachOrb, CoachProvider, type CoachProviderProps, type CoachRegion, type CoachWhen, type CoachWhere, ColorField, type ColorToken, type Column, Combobox, type CommandItem, CommandPalette, type Container, Counter, type Currency, DARK_TOKENS, DataTable, type DataTableProps, DateRangePicker, Drawer, Dropdown, Dropzone, EmptyState, type FieldSize, FileRow, type FilterChip, FilterChips, FunnelChart, type FunnelStage, Gallery, type GalleryImage, type GalleryProps, GoalBar, Heatmap, Input, type InputProps, Lightbox, type LightboxProps, LocaleCtx, type MediaState, Modal, Money, type MoneyProps, MoneyProvider, MultiSelect, NumberStepper, type NumberStepperProps, type Option, PROVIDER_LEVEL_LABEL, PROVIDER_LEVEL_LABEL_EN, PageHeader, ParetoChart, type ParetoItem, Phone, type PhoneFormat, type PhoneParts, type PhoneProps, Product3DViewer, type Product3DViewerProps, Progress, ProviderBadge, type ProviderBadgeProps, type ProviderBadgeSize, type ProviderLevel, ProviderMark, type ProviderMarkProps, RADIUS_SCALE, Radio, RadioGroup, type Radius, type Range, RatingInput, type RatingInputProps, type RunwayItem, SHADOW_SCALE, Scrubber, SearchInput, Select, type SelectProps, type Shadow, type ShareItem, ShareList, Sheet, Skeleton, type SortableApi, type SortableItemProps, SortableStatus, Sparkline, Stars, type StarsProps, StatCard, type StatCardProps, Stepper, type StepperStep, StockRunway, Switch, type SymbolStyle, TEXT_SCALE, TOKENS, type TabItem, Tabs, TechnicalInput, type TechnicalInputProps, type TechnicalKind, TechnicalText, type TextSize, Textarea, type TextareaProps, Timeline, type TimelineStep, Toast, ToastHost, type ToastInput, type ToastItem, type ToastTone, type TokenName, Tone, Tooltip, TrendChart, type UITextKey, type UploadFile, type UploadState, type UseSortableOptions, VerifiedBadge, type VerifiedBadgeProps, VideoPlayer, type VideoPlayerProps, type VideoSuggestion, WaterfallChart, type WaterfallStep, WhatsAppIcon, coachSeconds, currencyName, currencySymbol, daysBetween, formatBytes, formatDate, formatRange, formatTime, isCurrency, normalizeHex, parsePhone, presets,
|
|
2415
|
+
export { ANIMATE_SCALE, Accordion, type AccordionItem, Alert, type Animation, type AudioLevel, AudioPlayer, type AudioPlayerProps, Avatar, type AvatarSize, Badge, type BadgeProps, BarChart, type BarSeries, BrowserFrame, type BrowserFrameProps, Button, type ButtonProps, ButtonSize, ButtonVariant, COLOR_SCALE, CONTAINER_SCALE, Card, CardHeader, Carousel, type CarouselProps, type Chapter, Checkbox, ChoiceCards, type ChoiceOption, type ChoiceProps, Coach, type CoachApi, type CoachAudio, type CoachHint, type CoachItem, type CoachLine, type CoachOrb, CoachProvider, type CoachProviderProps, type CoachRegion, type CoachWhen, type CoachWhere, ColorField, type ColorToken, type Column, Combobox, type CommandItem, CommandPalette, type Container, Counter, type Currency, DARK_TOKENS, DataTable, type DataTableProps, DateRangePicker, Drawer, Dropdown, Dropzone, EmptyState, type FieldSize, FileRow, type FilterChip, FilterChips, FunnelChart, type FunnelStage, Gallery, type GalleryImage, type GalleryProps, GoalBar, Heatmap, Input, type InputProps, Lightbox, type LightboxProps, LocaleCtx, type MediaState, Modal, Money, type MoneyProps, MoneyProvider, MultiSelect, NumberStepper, type NumberStepperProps, type Option, PROVIDER_LEVEL_LABEL, PROVIDER_LEVEL_LABEL_EN, PageHeader, ParetoChart, type ParetoItem, Phone, type PhoneFormat, type PhoneParts, type PhoneProps, Product3DViewer, type Product3DViewerProps, Progress, ProviderBadge, type ProviderBadgeProps, type ProviderBadgeSize, type ProviderLevel, ProviderMark, type ProviderMarkProps, RADIUS_SCALE, Radio, RadioGroup, type Radius, type Range, RatingInput, type RatingInputProps, type RunwayItem, SHADOW_SCALE, Scrubber, SearchInput, Select, type SelectProps, type Shadow, type ShareItem, ShareList, Sheet, Skeleton, type SortableApi, type SortableItemProps, SortableStatus, Sparkline, Stars, type StarsProps, StatCard, type StatCardProps, Stepper, type StepperStep, StockRunway, Switch, type SymbolStyle, TEXT_SCALE, TOKENS, type TabItem, Tabs, TechnicalInput, type TechnicalInputProps, type TechnicalKind, TechnicalText, type TextSize, Textarea, type TextareaProps, Timeline, type TimelineStep, Toast, ToastHost, type ToastInput, type ToastItem, type ToastTone, type TokenName, Tone, Tooltip, TrendChart, type UITextKey, type UploadFile, type UploadState, type UseSortableOptions, VerifiedBadge, type VerifiedBadgeProps, VideoPlayer, type VideoPlayerProps, type VideoSuggestion, WaterfallChart, type WaterfallStep, WhatsAppIcon, coachSeconds, currencyName, currencySymbol, daysBetween, formatBytes, formatDate, formatRange, formatTime, isCurrency, normalizeHex, parsePhone, presets, useAudioLevel, useCoach, useCoachOptional, useCurrency, useCurrencySymbol, useMedia, useMoneyLang, useMoneyLocale, useSortable, useToasts, useUIText };
|