noorui-rtl 0.4.6 → 0.5.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.
package/CHANGELOG.md CHANGED
@@ -272,7 +272,7 @@ This release focuses on code quality improvements and documentation completeness
272
272
 
273
273
  Major update to Noor UI with significant component additions and improvements.
274
274
 
275
- **Core Components (54)**
275
+ **Core Components (69)**
276
276
  - Form components: Form, Button, Input, Label, Textarea, Checkbox, Radio Group, Select, Switch, Slider
277
277
  - Layout components: Card, Separator, Tabs, Accordion, Collapsible
278
278
  - Navigation: Breadcrumb, Pagination, Command
package/CONTRIBUTING.md CHANGED
@@ -78,6 +78,8 @@ npm run dev
78
78
  - `npm run dev` - Start development server (documentation site)
79
79
  - `npm run build` - Build for production (includes checks)
80
80
  - `npm run build:skip-checks` - Build without running checks
81
+ - `npm run storybook` - Start Storybook for interactive component development
82
+ - `npm run storybook:build` - Build static Storybook
81
83
  - `npm run lint` - Run ESLint
82
84
  - `npm run type-check` - Run TypeScript type checking
83
85
  - `npm run check:translations` - Verify translation completeness
package/README.md CHANGED
@@ -4,12 +4,13 @@
4
4
 
5
5
  [![npm version](https://badge.fury.io/js/noorui-rtl.svg)](https://www.npmjs.com/package/noorui-rtl)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
+ [![Storybook](https://img.shields.io/badge/Storybook-Interactive-FF4785?logo=storybook&logoColor=white)](https://storybook.noorui.com)
7
8
 
8
9
  ![Noor UI - Beautiful RTL-first React components for bilingual applications](https://raw.githubusercontent.com/ositaka/noor-ui/main/public/noorui--og-image--bilingual.png)
9
10
 
10
11
  Beautiful RTL-first React components for bilingual applications. Built with Radix UI, Tailwind CSS, and full Arabic/English support.
11
12
 
12
- **[Documentation](https://noorui.com)** · **[Examples](https://noorui.com/examples)** · **[npm](https://www.npmjs.com/package/noorui-rtl)**
13
+ **[Documentation](https://noorui.com)** · **[Storybook](https://storybook.noorui.com)** · **[Examples](https://noorui.com/examples)** · **[npm](https://www.npmjs.com/package/noorui-rtl)**
13
14
 
14
15
  ## ✨ Features
15
16
 
@@ -204,7 +205,7 @@ export default function App() {
204
205
 
205
206
  ## 📚 Components
206
207
 
207
- ### Core UI (54 components)
208
+ ### Core UI (69 components)
208
209
 
209
210
  **Forms**: Button, Input, Label, Textarea, Checkbox, Radio, Select, Switch, Slider, Form
210
211
 
@@ -298,6 +299,7 @@ Full documentation, examples, and guides available at **[noorui.com](https://noo
298
299
 
299
300
  - [Getting Started](https://noorui.com/getting-started)
300
301
  - [Components](https://noorui.com/components)
302
+ - [Storybook](https://storybook.noorui.com) - **Interactive component playground with 749 stories**
301
303
  - [RTL Guide](https://noorui.com/rtl-guide)
302
304
  - [Examples](https://noorui.com/examples)
303
305
  - [Starters](https://noorui.com/starters)
package/dist/index.d.mts CHANGED
@@ -159,8 +159,9 @@ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.Re
159
159
  * Arrow direction semantics:
160
160
  * - 'forward': Arrow points in the direction of progression (right in LTR, left in RTL)
161
161
  * - 'back': Arrow points in the opposite direction (left in LTR, right in RTL)
162
+ * - 'external': Diagonal arrow for external links (↗ in LTR, ↖ in RTL)
162
163
  */
163
- type ArrowDirection = 'forward' | 'back';
164
+ type ArrowDirection = 'forward' | 'back' | 'external';
164
165
  /**
165
166
  * Arrow icon style:
166
167
  * - 'chevron': Uses chevron icons (< or >)
@@ -199,6 +200,13 @@ interface ButtonArrowProps extends ButtonProps {
199
200
  * Back to Blog
200
201
  * </ButtonArrow>
201
202
  *
203
+ * // External link button (diagonal arrow, ↗ in LTR, ↖ in RTL)
204
+ * <ButtonArrow direction="external" asChild>
205
+ * <a href="https://example.com" target="_blank" rel="noopener noreferrer">
206
+ * View Documentation
207
+ * </a>
208
+ * </ButtonArrow>
209
+ *
202
210
  * // With arrow style
203
211
  * <ButtonArrow direction="forward" icon="arrow">
204
212
  * Next Step
@@ -1381,7 +1389,7 @@ declare const RichTextEditor: React$1.ForwardRefExoticComponent<RichTextEditorPr
1381
1389
  declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1382
1390
  declare const ScrollBar: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1383
1391
 
1384
- declare const Select: typeof SelectPrimitive.Root;
1392
+ declare const Select: ({ dir, ...props }: React$1.ComponentPropsWithoutRef<typeof SelectPrimitive.Root>) => React$1.JSX.Element;
1385
1393
  declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
1386
1394
  declare const SelectValue: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
1387
1395
  declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
package/dist/index.d.ts CHANGED
@@ -159,8 +159,9 @@ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.Re
159
159
  * Arrow direction semantics:
160
160
  * - 'forward': Arrow points in the direction of progression (right in LTR, left in RTL)
161
161
  * - 'back': Arrow points in the opposite direction (left in LTR, right in RTL)
162
+ * - 'external': Diagonal arrow for external links (↗ in LTR, ↖ in RTL)
162
163
  */
163
- type ArrowDirection = 'forward' | 'back';
164
+ type ArrowDirection = 'forward' | 'back' | 'external';
164
165
  /**
165
166
  * Arrow icon style:
166
167
  * - 'chevron': Uses chevron icons (< or >)
@@ -199,6 +200,13 @@ interface ButtonArrowProps extends ButtonProps {
199
200
  * Back to Blog
200
201
  * </ButtonArrow>
201
202
  *
203
+ * // External link button (diagonal arrow, ↗ in LTR, ↖ in RTL)
204
+ * <ButtonArrow direction="external" asChild>
205
+ * <a href="https://example.com" target="_blank" rel="noopener noreferrer">
206
+ * View Documentation
207
+ * </a>
208
+ * </ButtonArrow>
209
+ *
202
210
  * // With arrow style
203
211
  * <ButtonArrow direction="forward" icon="arrow">
204
212
  * Next Step
@@ -1381,7 +1389,7 @@ declare const RichTextEditor: React$1.ForwardRefExoticComponent<RichTextEditorPr
1381
1389
  declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1382
1390
  declare const ScrollBar: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1383
1391
 
1384
- declare const Select: typeof SelectPrimitive.Root;
1392
+ declare const Select: ({ dir, ...props }: React$1.ComponentPropsWithoutRef<typeof SelectPrimitive.Root>) => React$1.JSX.Element;
1385
1393
  declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
1386
1394
  declare const SelectValue: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
1387
1395
  declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
package/dist/index.js CHANGED
@@ -104,6 +104,19 @@ function DirectionProvider({ children }) {
104
104
  if (document.documentElement.lang !== initialLocale) {
105
105
  document.documentElement.lang = initialLocale;
106
106
  }
107
+ if (typeof window !== "undefined" && window.parent !== window) {
108
+ const observer = new MutationObserver(() => {
109
+ const newDir = document.documentElement.dir || "ltr";
110
+ const newLang = document.documentElement.lang || "en";
111
+ setDirectionState((prevDir) => prevDir !== newDir ? newDir : prevDir);
112
+ setLocaleState((prevLang) => prevLang !== newLang ? newLang : prevLang);
113
+ });
114
+ observer.observe(document.documentElement, {
115
+ attributes: true,
116
+ attributeFilter: ["dir", "lang"]
117
+ });
118
+ return () => observer.disconnect();
119
+ }
107
120
  }, []);
108
121
  const setDirection = React74__namespace.useCallback((newDirection) => {
109
122
  setDirectionState(newDirection);
@@ -1082,8 +1095,11 @@ var ButtonArrow = React74__namespace.forwardRef(
1082
1095
  asChild = false,
1083
1096
  ...props
1084
1097
  }, ref) => {
1085
- const resolvedPosition = iconPosition === "auto" ? direction === "forward" ? "end" : "start" : iconPosition;
1098
+ const resolvedPosition = iconPosition === "auto" ? direction === "back" ? "start" : "end" : iconPosition;
1086
1099
  const IconComponent = React74__namespace.useMemo(() => {
1100
+ if (direction === "external") {
1101
+ return lucideReact.ArrowUpRight;
1102
+ }
1087
1103
  if (icon === "chevron") {
1088
1104
  return direction === "forward" ? lucideReact.ChevronRight : lucideReact.ChevronLeft;
1089
1105
  }
@@ -1091,7 +1107,8 @@ var ButtonArrow = React74__namespace.forwardRef(
1091
1107
  }, [direction, icon]);
1092
1108
  const iconClasses = cn(
1093
1109
  iconSizeClasses[iconSize],
1094
- "rtl:rotate-180",
1110
+ // External links need horizontal mirroring (scale-x), not rotation
1111
+ direction === "external" ? "rtl:scale-x-[-1]" : "rtl:rotate-180",
1095
1112
  "shrink-0",
1096
1113
  "transition-transform duration-200"
1097
1114
  );
@@ -1151,12 +1168,30 @@ var common = {
1151
1168
  components: "Components",
1152
1169
  examples: "Examples",
1153
1170
  starters: "Starters",
1171
+ storybook: "Storybook",
1154
1172
  rtlGuide: "RTL Guide",
1155
1173
  tokens: "Design Tokens",
1156
1174
  themes: "Themes",
1157
1175
  documentation: "Documentation",
1158
1176
  getStarted: "Get Started"
1159
1177
  },
1178
+ storybook: {
1179
+ title: "Storybook",
1180
+ viewInStorybook: "View in Storybook",
1181
+ exploreStorybook: "Explore Storybook",
1182
+ tryStorybook: "Try Storybook",
1183
+ openStorybook: "Open Storybook",
1184
+ interactivePlayground: "Interactive Component Playground",
1185
+ description: "Explore 749 interactive stories across 74 components. Switch between RTL/LTR, try different themes, and test accessibility\u2014all in your browser.",
1186
+ shortDescription: "Interactive component showcase with 749 stories",
1187
+ features: {
1188
+ interactive: "Live component playground",
1189
+ rtl: "RTL/LTR switching",
1190
+ themes: "4 theme variants",
1191
+ accessibility: "Full accessibility testing",
1192
+ examples: "Arabic/English examples"
1193
+ }
1194
+ },
1160
1195
  ui: {
1161
1196
  button: {
1162
1197
  submit: "Submit",
@@ -1582,6 +1617,7 @@ var common = {
1582
1617
  home: "Home",
1583
1618
  gettingStarted: "Getting Started",
1584
1619
  documentation: "Documentation",
1620
+ storybook: "Storybook",
1585
1621
  rtlGuide: "RTL Development Guide",
1586
1622
  roadmap: "Roadmap",
1587
1623
  themes: "Themes",
@@ -3375,7 +3411,7 @@ var home = {
3375
3411
  },
3376
3412
  recentWins: {
3377
3413
  title: "Recent Wins",
3378
- performance: "NPM package published (noorui-rtl v0.4.5)",
3414
+ performance: "NPM package published (noorui-rtl v0.4.6)",
3379
3415
  skeletons: "74+ production-ready components with full documentation",
3380
3416
  components: "10+ complete demo projects (Blog, Marketplace, AI workflows)",
3381
3417
  rebranding: "Full RTL/LTR support for ALL RTL languages (Arabic, Hebrew, Urdu, Farsi) + WCAG AA accessibility"
@@ -3929,6 +3965,7 @@ var documentation = {
3929
3965
  title: "Components",
3930
3966
  description: "Browse all available UI components",
3931
3967
  library: "Component Library",
3968
+ storybook: "Storybook \u2197",
3932
3969
  props: "Props Documentation",
3933
3970
  examples: "Examples"
3934
3971
  },
@@ -4507,7 +4544,7 @@ var examples = {
4507
4544
  lookingForAppsDesc: "Browse production-ready starters - complete applications with authentication, database, and everything you need to get started.",
4508
4545
  viewStarters: "View Production Starters \u2192",
4509
4546
  lookingForComponents: "Looking for Individual Components?",
4510
- lookingForComponentsDesc: "Browse our complete component library with 64 fully documented components (including 10 experimental AI/LLM components) with live examples and accessibility guidelines.",
4547
+ lookingForComponentsDesc: "Browse our complete component library with 74 fully documented components with live examples and accessibility guidelines.",
4511
4548
  viewAllComponents: "View All Components \u2192"
4512
4549
  },
4513
4550
  exampleCards: [
@@ -4674,7 +4711,7 @@ var examples = {
4674
4711
  var components_meta = {
4675
4712
  components: {
4676
4713
  title: "Components",
4677
- description: "64 beautifully designed components built with Radix UI, Tailwind CSS, and React Flow. 54 production-ready, 10 experimental AI/LLM components. Full RTL support, accessible, and customizable.",
4714
+ description: "74 beautifully designed components built with Radix UI, Tailwind CSS, and React Flow. Full RTL support, accessible, and customizable.",
4678
4715
  quickPreview: "Quick Preview",
4679
4716
  previewDescription: "See how components adapt to different directions",
4680
4717
  categories: {
@@ -9555,12 +9592,30 @@ var common2 = {
9555
9592
  components: "\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A",
9556
9593
  examples: "\u0627\u0644\u0623\u0645\u062B\u0644\u0629",
9557
9594
  starters: "\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0628\u062F\u0627\u064A\u0629",
9595
+ storybook: "\u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643",
9558
9596
  rtlGuide: "\u062F\u0644\u064A\u0644 RTL",
9559
9597
  tokens: "\u0631\u0645\u0648\u0632 \u0627\u0644\u062A\u0635\u0645\u064A\u0645",
9560
9598
  themes: "\u0627\u0644\u0633\u0645\u0627\u062A",
9561
9599
  documentation: "\u0627\u0644\u062A\u0648\u062B\u064A\u0642",
9562
9600
  getStarted: "\u0627\u0628\u062F\u0623 \u0627\u0644\u0622\u0646"
9563
9601
  },
9602
+ storybook: {
9603
+ title: "\u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643",
9604
+ viewInStorybook: "\u0639\u0631\u0636 \u0641\u064A \u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643",
9605
+ exploreStorybook: "\u0627\u0633\u062A\u0643\u0634\u0641 \u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643",
9606
+ tryStorybook: "\u062C\u0631\u0651\u0628 \u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643",
9607
+ openStorybook: "\u0627\u0641\u062A\u062D \u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643",
9608
+ interactivePlayground: "\u0633\u0627\u062D\u0629 \u0645\u0643\u0648\u0646\u0627\u062A \u062A\u0641\u0627\u0639\u0644\u064A\u0629",
9609
+ description: "\u0627\u0633\u062A\u0643\u0634\u0641 749 \u0642\u0635\u0629 \u062A\u0641\u0627\u0639\u0644\u064A\u0629 \u0639\u0628\u0631 74 \u0645\u0643\u0648\u0646\u064B\u0627. \u0642\u0645 \u0628\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0628\u064A\u0646 RTL/LTR\u060C \u0648\u062C\u0631\u0651\u0628 \u0633\u0645\u0627\u062A \u0645\u062E\u062A\u0644\u0641\u0629\u060C \u0648\u0627\u062E\u062A\u0628\u0631 \u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u0627\u0644\u0648\u0635\u0648\u0644\u2014\u0643\u0644 \u0630\u0644\u0643 \u0641\u064A \u0645\u062A\u0635\u0641\u062D\u0643.",
9610
+ shortDescription: "\u0639\u0631\u0636 \u062A\u0641\u0627\u0639\u0644\u064A \u0644\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0645\u0639 749 \u0642\u0635\u0629",
9611
+ features: {
9612
+ interactive: "\u0633\u0627\u062D\u0629 \u0645\u0643\u0648\u0646\u0627\u062A \u062D\u064A\u0629",
9613
+ rtl: "\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0628\u064A\u0646 RTL/LTR",
9614
+ themes: "4 \u0623\u0646\u0648\u0627\u0639 \u0645\u0646 \u0627\u0644\u0633\u0645\u0627\u062A",
9615
+ accessibility: "\u0627\u062E\u062A\u0628\u0627\u0631 \u0643\u0627\u0645\u0644 \u0644\u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u0627\u0644\u0648\u0635\u0648\u0644",
9616
+ examples: "\u0623\u0645\u062B\u0644\u0629 \u0628\u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0648\u0627\u0644\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629"
9617
+ }
9618
+ },
9564
9619
  ui: {
9565
9620
  button: {
9566
9621
  submit: "\u0625\u0631\u0633\u0627\u0644",
@@ -9986,6 +10041,7 @@ var common2 = {
9986
10041
  home: "\u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629",
9987
10042
  gettingStarted: "\u0627\u0644\u0628\u062F\u0621",
9988
10043
  documentation: "\u0627\u0644\u062A\u0648\u062B\u064A\u0642",
10044
+ storybook: "\u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643",
9989
10045
  rtlGuide: "\u062F\u0644\u064A\u0644 \u062A\u0637\u0648\u064A\u0631 RTL",
9990
10046
  roadmap: "\u062E\u0627\u0631\u0637\u0629 \u0627\u0644\u0637\u0631\u064A\u0642",
9991
10047
  themes: "\u0627\u0644\u0633\u0645\u0627\u062A",
@@ -11779,7 +11835,7 @@ var home2 = {
11779
11835
  },
11780
11836
  recentWins: {
11781
11837
  title: "\u0627\u0644\u0625\u0646\u062C\u0627\u0632\u0627\u062A \u0627\u0644\u0623\u062E\u064A\u0631\u0629",
11782
- performance: "\u062A\u0645 \u0646\u0634\u0631 \u062D\u0632\u0645\u0629 NPM (noorui-rtl v0.4.5)",
11838
+ performance: "\u062A\u0645 \u0646\u0634\u0631 \u062D\u0632\u0645\u0629 NPM (noorui-rtl v0.4.6)",
11783
11839
  skeletons: "\u0623\u0643\u062B\u0631 \u0645\u0646 74 \u0645\u0643\u0648\u0646 \u062C\u0627\u0647\u0632 \u0644\u0644\u0625\u0646\u062A\u0627\u062C \u0645\u0639 \u062A\u0648\u062B\u064A\u0642 \u0643\u0627\u0645\u0644",
11784
11840
  components: "\u0623\u0643\u062B\u0631 \u0645\u0646 10 \u0645\u0634\u0627\u0631\u064A\u0639 \u0639\u0631\u0636 \u0643\u0627\u0645\u0644\u0629 (\u0645\u062F\u0648\u0646\u0629\u060C \u0633\u0648\u0642\u060C \u0633\u064A\u0631 \u0639\u0645\u0644 AI)",
11785
11841
  rebranding: "\u062F\u0639\u0645 \u0643\u0627\u0645\u0644 \u0644\u062C\u0645\u064A\u0639 \u0627\u0644\u0644\u063A\u0627\u062A RTL (\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u060C \u0627\u0644\u0639\u0628\u0631\u064A\u0629\u060C \u0627\u0644\u0623\u0631\u062F\u064A\u0629\u060C \u0627\u0644\u0641\u0627\u0631\u0633\u064A\u0629) + \u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u0627\u0644\u0648\u0635\u0648\u0644 WCAG AA"
@@ -12333,6 +12389,7 @@ var documentation2 = {
12333
12389
  title: "\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A",
12334
12390
  description: "\u062A\u0635\u0641\u062D \u062C\u0645\u064A\u0639 \u0645\u0643\u0648\u0646\u0627\u062A \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0645\u062A\u0627\u062D\u0629",
12335
12391
  library: "\u0645\u0643\u062A\u0628\u0629 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A",
12392
+ storybook: "\u0633\u062A\u0648\u0631\u064A\u0628\u0648\u0643 \u2197",
12336
12393
  props: "\u062A\u0648\u062B\u064A\u0642 \u0627\u0644\u062E\u0635\u0627\u0626\u0635",
12337
12394
  examples: "\u0627\u0644\u0623\u0645\u062B\u0644\u0629"
12338
12395
  },
@@ -12911,7 +12968,7 @@ var examples2 = {
12911
12968
  lookingForAppsDesc: "\u062A\u0635\u0641\u062D \u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0628\u062F\u0621 \u0627\u0644\u062C\u0627\u0647\u0632\u0629 \u0644\u0644\u0625\u0646\u062A\u0627\u062C - \u062A\u0637\u0628\u064A\u0642\u0627\u062A \u0643\u0627\u0645\u0644\u0629 \u0645\u0639 \u0645\u0635\u0627\u062F\u0642\u0629\u060C \u0642\u0627\u0639\u062F\u0629 \u0628\u064A\u0627\u0646\u0627\u062A\u060C \u0648\u0643\u0644 \u0645\u0627 \u062A\u062D\u062A\u0627\u062C\u0647 \u0644\u0644\u0628\u062F\u0621.",
12912
12969
  viewStarters: "\u0639\u0631\u0636 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u062C\u0627\u0647\u0632\u0629 \u2190",
12913
12970
  lookingForComponents: "\u0647\u0644 \u062A\u0628\u062D\u062B \u0639\u0646 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0641\u0631\u062F\u064A\u0629\u061F",
12914
- lookingForComponentsDesc: "\u062A\u0635\u0641\u062D \u0645\u0643\u062A\u0628\u0629 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0643\u0627\u0645\u0644\u0629 \u0644\u062F\u064A\u0646\u0627 \u0627\u0644\u062A\u064A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 64 \u0645\u0643\u0648\u0646\u0627\u064B \u0645\u0648\u062B\u0642\u0627\u064B \u0628\u0627\u0644\u0643\u0627\u0645\u0644 (\u0628\u0645\u0627 \u0641\u064A \u0630\u0644\u0643 10 \u0645\u0643\u0648\u0646\u0627\u062A \u062A\u062C\u0631\u064A\u0628\u064A\u0629 \u0644\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A) \u0645\u0639 \u0623\u0645\u062B\u0644\u0629 \u062D\u064A\u0629 \u0648\u0625\u0631\u0634\u0627\u062F\u0627\u062A \u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u0627\u0644\u0648\u0635\u0648\u0644.",
12971
+ lookingForComponentsDesc: "\u062A\u0635\u0641\u062D \u0645\u0643\u062A\u0628\u0629 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0627\u0644\u0643\u0627\u0645\u0644\u0629 \u0644\u062F\u064A\u0646\u0627 \u0627\u0644\u062A\u064A \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 74 \u0645\u0643\u0648\u0646\u0627\u064B \u0645\u0648\u062B\u0642\u0627\u064B \u0628\u0627\u0644\u0643\u0627\u0645\u0644 \u0645\u0639 \u0623\u0645\u062B\u0644\u0629 \u062D\u064A\u0629 \u0648\u0625\u0631\u0634\u0627\u062F\u0627\u062A \u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u0627\u0644\u0648\u0635\u0648\u0644.",
12915
12972
  viewAllComponents: "\u0639\u0631\u0636 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u2190"
12916
12973
  },
12917
12974
  exampleCards: [
@@ -13078,7 +13135,7 @@ var examples2 = {
13078
13135
  var components_meta2 = {
13079
13136
  components: {
13080
13137
  title: "\u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A",
13081
- description: "64 \u0645\u0643\u0648\u0651\u0646 \u0645\u0635\u0645\u0645 \u0628\u0634\u0643\u0644 \u062C\u0645\u064A\u0644 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 Radix UI \u0648 Tailwind CSS \u0648 React Flow. 54 \u0645\u0643\u0648\u0651\u0646 \u062C\u0627\u0647\u0632 \u0644\u0644\u0625\u0646\u062A\u0627\u062C\u060C 10 \u0645\u0643\u0648\u0646\u0627\u062A \u062A\u062C\u0631\u064A\u0628\u064A\u0629 \u0644\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A. \u062F\u0639\u0645 \u0643\u0627\u0645\u0644 \u0644\u0627\u062A\u062C\u0627\u0647 \u0627\u0644\u0646\u0635\u060C \u0642\u0627\u0628\u0644 \u0644\u0644\u0648\u0635\u0648\u0644\u060C \u0648\u0642\u0627\u0628\u0644 \u0644\u0644\u062A\u062E\u0635\u064A\u0635.",
13138
+ description: "74 \u0645\u0643\u0648\u0651\u0646 \u0645\u0635\u0645\u0645 \u0628\u0634\u0643\u0644 \u062C\u0645\u064A\u0644 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 Radix UI \u0648 Tailwind CSS \u0648 React Flow. \u062F\u0639\u0645 \u0643\u0627\u0645\u0644 \u0644\u0627\u062A\u062C\u0627\u0647 \u0627\u0644\u0646\u0635\u060C \u0642\u0627\u0628\u0644 \u0644\u0644\u0648\u0635\u0648\u0644\u060C \u0648\u0642\u0627\u0628\u0644 \u0644\u0644\u062A\u062E\u0635\u064A\u0635.",
13082
13139
  quickPreview: "\u0645\u0639\u0627\u064A\u0646\u0629 \u0633\u0631\u064A\u0639\u0629",
13083
13140
  previewDescription: "\u0634\u0627\u0647\u062F \u0643\u064A\u0641 \u062A\u062A\u0643\u064A\u0641 \u0627\u0644\u0645\u0643\u0648\u0646\u0627\u062A \u0645\u0639 \u0627\u0644\u0627\u062A\u062C\u0627\u0647\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0644\u0641\u0629",
13084
13141
  categories: {
@@ -18270,7 +18327,7 @@ var Calendar2 = React74__namespace.forwardRef(
18270
18327
  }
18271
18328
  return days2;
18272
18329
  }, [locale]);
18273
- return /* @__PURE__ */ React74__namespace.createElement("div", { ref, className: cn("w-full p-4", className), ...props }, /* @__PURE__ */ React74__namespace.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React74__namespace.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React74__namespace.createElement(
18330
+ return /* @__PURE__ */ React74__namespace.createElement("div", { ref, className: cn("w-full p-4", className), ...props }, /* @__PURE__ */ React74__namespace.createElement("div", { className: "flex items-center justify-between mb-4 gap-4" }, /* @__PURE__ */ React74__namespace.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React74__namespace.createElement(
18274
18331
  Button,
18275
18332
  {
18276
18333
  type: "button",
@@ -21050,11 +21107,16 @@ var MessageActions = React74__namespace.forwardRef(
21050
21107
  }
21051
21108
  );
21052
21109
  MessageActions.displayName = "MessageActions";
21053
- var Select = ((props) => {
21110
+ var Select = ({ dir, ...props }) => {
21054
21111
  const { direction } = useDirection();
21055
- return /* @__PURE__ */ React74__namespace.createElement(SelectPrimitive__namespace.Root, { dir: direction, ...props });
21056
- });
21057
- Select.displayName = "Select";
21112
+ return /* @__PURE__ */ React74__namespace.createElement(
21113
+ SelectPrimitive__namespace.Root,
21114
+ {
21115
+ dir: dir || direction,
21116
+ ...props
21117
+ }
21118
+ );
21119
+ };
21058
21120
  var SelectGroup = SelectPrimitive__namespace.Group;
21059
21121
  var SelectValue = SelectPrimitive__namespace.Value;
21060
21122
  var SelectTrigger = React74__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React74__namespace.createElement(
@@ -21910,23 +21972,12 @@ var PromptInput = React74__namespace.forwardRef(
21910
21972
  );
21911
21973
  PromptInput.displayName = "PromptInput";
21912
21974
  var RadioGroup3 = React74__namespace.forwardRef(({ className, dir, ...props }, ref) => {
21913
- const [documentDir, setDocumentDir] = React74__namespace.useState("ltr");
21914
- React74__namespace.useEffect(() => {
21915
- setDocumentDir(document.documentElement.dir || "ltr");
21916
- const observer = new MutationObserver(() => {
21917
- setDocumentDir(document.documentElement.dir || "ltr");
21918
- });
21919
- observer.observe(document.documentElement, {
21920
- attributes: true,
21921
- attributeFilter: ["dir"]
21922
- });
21923
- return () => observer.disconnect();
21924
- }, []);
21975
+ const { direction } = useDirection();
21925
21976
  return /* @__PURE__ */ React74__namespace.createElement(
21926
21977
  RadioGroupPrimitive__namespace.Root,
21927
21978
  {
21928
21979
  className: cn("grid gap-2", className),
21929
- dir: dir || documentDir,
21980
+ dir: dir || direction,
21930
21981
  ...props,
21931
21982
  ref
21932
21983
  }