@almadar/ui 2.15.5 → 2.15.7

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.
@@ -1,5 +1,5 @@
1
1
  import { useEventBus } from './chunk-YXZM3WCF.js';
2
- import { en_default } from './chunk-2XXSUIOK.js';
2
+ import { en_default } from './chunk-QIABKRCN.js';
3
3
  import React2, { createContext, useRef, useEffect, useCallback, useContext, useState, useMemo } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,6 +1,6 @@
1
- import { SuspenseConfigProvider } from './chunk-4TXM7YAX.js';
1
+ import { SuspenseConfigProvider } from './chunk-K43H3ZDY.js';
2
2
  import { ThemeProvider } from './chunk-DKQN5FVU.js';
3
- import { SelectionProvider, EntityDataProvider } from './chunk-QU2X55WH.js';
3
+ import { SelectionProvider, EntityDataProvider } from './chunk-CDIOHSKG.js';
4
4
  import { useEventBus, EventBusProvider } from './chunk-YXZM3WCF.js';
5
5
  import { recordTransition, registerCheck, bindEventBus, bindTraitStateGetter } from './chunk-XL7WB2O5.js';
6
6
  import { useOfflineExecutor } from './chunk-K2D5D3WK.js';
@@ -1,6 +1,6 @@
1
1
  import { useAssetLoader, useGameCanvas3DEvents, ModelLoader, Canvas3DLoadingState, Canvas3DErrorBoundary, UnitRenderer, TileRenderer, Scene3D, PhysicsObject3D, Lighting3D, FeatureRenderer3D, FeatureRenderer, Camera3D } from './chunk-4N3BAPDB.js';
2
2
  import { useTheme, useUISlots } from './chunk-DKQN5FVU.js';
3
- import { useTranslate, useInfiniteScroll, useQuerySingleton, useLongPress, useSwipeGesture, useDragReorder, usePullToRefresh, useAuthContext } from './chunk-QU2X55WH.js';
3
+ import { useTranslate, useInfiniteScroll, useQuerySingleton, useLongPress, useSwipeGesture, useDragReorder, usePullToRefresh, useAuthContext } from './chunk-CDIOHSKG.js';
4
4
  import { useEventBus, useEventListener } from './chunk-YXZM3WCF.js';
5
5
  import { cn, DEFAULT_CONFIG, debugGroup, debug, debugGroupEnd, updateAssetStatus, bindCanvasCapture, getNestedValue, isDebugEnabled, renderStateMachineToDomData, parseContentSegments, isDebugEnabled2, onDebugToggle, subscribeToTraitChanges, subscribeToTickChanges, subscribeToGuardChanges, subscribeToDebugEvents, subscribeToVerification, getEntitySnapshot, getSummary, getBridgeHealth, getTransitions, getAllChecks, getDebugEvents, getGuardHistory, getAllTicks, getAllTraits } from './chunk-XL7WB2O5.js';
6
6
  import { isPortalSlot } from './chunk-K2D5D3WK.js';
@@ -12431,7 +12431,7 @@ var DataGrid = ({
12431
12431
  onClick: () => setVisibleCount((prev) => prev + (pageSize || 5)),
12432
12432
  children: [
12433
12433
  /* @__PURE__ */ jsx(Icon, { name: "chevron-down", size: "xs", className: "mr-1" }),
12434
- t("common.showMore") || "Show More",
12434
+ t("common.showMore"),
12435
12435
  " (",
12436
12436
  allData.length - visibleCount,
12437
12437
  " remaining)"
@@ -12778,7 +12778,7 @@ var DataList = ({
12778
12778
  onClick: () => setVisibleCount((prev) => prev + (pageSize || 5)),
12779
12779
  children: [
12780
12780
  /* @__PURE__ */ jsx(Icon, { name: "chevron-down", size: "xs", className: "mr-1" }),
12781
- t("common.showMore") || "Show More",
12781
+ t("common.showMore"),
12782
12782
  " (",
12783
12783
  allData.length - visibleCount,
12784
12784
  " remaining)"
@@ -15328,6 +15328,7 @@ var Form = ({
15328
15328
  return /* @__PURE__ */ jsxs(
15329
15329
  "form",
15330
15330
  {
15331
+ noValidate: true,
15331
15332
  className: cn(layoutStyles[layout], gapStyles6[gap], className),
15332
15333
  onSubmit: handleSubmit,
15333
15334
  ...props,
@@ -22123,7 +22124,7 @@ function ActionPalette({
22123
22124
  const { t } = useTranslate();
22124
22125
  return /* @__PURE__ */ jsxs(VStack, { className: cn("p-3 rounded-lg bg-card border border-border", className), gap: "sm", children: [
22125
22126
  /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: label ?? t("sequencer.actions") }),
22126
- /* @__PURE__ */ jsx(HStack, { className: "flex-wrap", gap: "sm", children: actions.map((action) => /* @__PURE__ */ jsx(
22127
+ /* @__PURE__ */ jsx(HStack, { className: "flex-wrap", gap: "sm", children: (actions ?? []).map((action) => /* @__PURE__ */ jsx(
22127
22128
  ActionTile,
22128
22129
  {
22129
22130
  action,
@@ -16,6 +16,7 @@ var en_default = {
16
16
  "common.actions": "Actions",
17
17
  "common.yes": "Yes",
18
18
  "common.no": "No",
19
+ "common.selected": "selected",
19
20
  "common.ok": "OK",
20
21
  "common.done": "Done",
21
22
  "common.apply": "Apply",
@@ -1,6 +1,6 @@
1
1
  import { subscribe, getSnapshot, clearEntities, removeEntity, updateSingleton, updateEntity, spawnEntity, getSingleton, getAllEntities, getByType, getEntity } from './chunk-N7MVUW4R.js';
2
2
  import { apiClient } from './chunk-3HJHHULT.js';
3
- import { SelectionContext, entityDataKeys, useEntityList } from './chunk-QU2X55WH.js';
3
+ import { SelectionContext, entityDataKeys, useEntityList } from './chunk-CDIOHSKG.js';
4
4
  import { useEventBus } from './chunk-YXZM3WCF.js';
5
5
  import { useCallback, useState, useEffect, useMemo, useContext, useSyncExternalStore, useRef } from 'react';
6
6
  import { useQueryClient, useMutation, useQuery } from '@tanstack/react-query';
@@ -5,6 +5,14 @@ export interface SelectOption {
5
5
  label: string;
6
6
  }
7
7
  export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange"> {
8
+ /** Placeholder text */
9
+ placeholder?: string;
10
+ /** Current value */
11
+ value?: string | number;
12
+ /** Whether input is disabled */
13
+ disabled?: boolean;
14
+ /** Declarative event name for trait dispatch */
15
+ action?: string;
8
16
  /** Input type - supports 'select' and 'textarea' in addition to standard types */
9
17
  inputType?: "text" | "email" | "password" | "number" | "tel" | "url" | "search" | "date" | "datetime-local" | "time" | "checkbox" | "select" | "textarea";
10
18
  error?: string;
@@ -1,5 +1,10 @@
1
1
  import React from "react";
2
2
  export interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {
3
+ /** Label text content */
4
+ text?: string;
5
+ /** Associated input element ID */
6
+ htmlFor?: string;
7
+ /** Show required indicator */
3
8
  required?: boolean;
4
9
  }
5
10
  export declare const Label: React.ForwardRefExoticComponent<LabelProps & React.RefAttributes<HTMLLabelElement>>;
@@ -5,6 +5,12 @@
5
5
  */
6
6
  import React from "react";
7
7
  export interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> {
8
+ /** Radio options (string array or SelectOption array) */
9
+ options?: string[];
10
+ /** Current selected value */
11
+ value?: string;
12
+ /** Declarative event name for trait dispatch */
13
+ action?: string;
8
14
  /**
9
15
  * Label text displayed next to the radio button
10
16
  */
@@ -5,8 +5,15 @@ export interface SelectOption {
5
5
  disabled?: boolean;
6
6
  }
7
7
  export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, "children"> {
8
+ /** Select options */
8
9
  options: SelectOption[];
10
+ /** Placeholder text */
9
11
  placeholder?: string;
12
+ /** Current value */
13
+ value?: string;
14
+ /** Declarative event name for trait dispatch */
15
+ action?: string;
16
+ /** Error message */
10
17
  error?: string;
11
18
  }
12
19
  export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
@@ -1,5 +1,12 @@
1
1
  import React from "react";
2
2
  export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
3
+ /** Placeholder text */
4
+ placeholder?: string;
5
+ /** Number of visible rows */
6
+ rows?: number;
7
+ /** Declarative event name for trait dispatch */
8
+ action?: string;
9
+ /** Error message */
3
10
  error?: string;
4
11
  }
5
12
  export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
@@ -1,18 +1,18 @@
1
- export { ENTITY_EVENTS, useAgentChat, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useEntities, useEntitiesByType, useEntity as useEntityById, useEntityMutations, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInput, useOrbitalHistory, useOrbitalMutations, usePhysics, usePinchZoom, usePlayer, usePreview, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useUIEvents, useUpdateEntity, useValidation } from '../chunk-IRIGCHP4.js';
1
+ export { ENTITY_EVENTS, useAgentChat, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useEntities, useEntitiesByType, useEntity as useEntityById, useEntityMutations, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInput, useOrbitalHistory, useOrbitalMutations, usePhysics, usePinchZoom, usePlayer, usePreview, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useUIEvents, useUpdateEntity, useValidation } from '../chunk-SD3KVCY6.js';
2
2
  export { clearEntities, getAllEntities, getByType, getEntity, getSingleton, removeEntity, spawnEntity, updateEntity, updateSingleton } from '../chunk-N7MVUW4R.js';
3
3
  import '../chunk-3HJHHULT.js';
4
- import { VStack, HStack, Typography, Button, Icon, Box, Card, DataTable, Badge, Toast } from '../chunk-4TXM7YAX.js';
5
- export { ALL_PRESETS, AR_BOOK_FIELDS, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, Breadcrumb, BuilderBoard, Button, ButtonGroup, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeView, CodeViewer, CombatLog, ComboCounter, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ControlButton, CounterTemplate, CraftingRecipe, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, DialogueBox, DialogueBubble, Divider, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, EmptyState, EnemyPlate, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FLOOR_HEIGHT, FilterGroup, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormField, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LawReferenceTooltip, Lightbox, LineChart, List, LoadingState, MapView, MarkdownContent, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, Navigation, NegotiatorBoard, NumberStepper, ObjectRulePanel, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PlatformerCanvas, Popover, PowerupSlots, ProgressBar, ProgressDots, PullToRefresh, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ResourceBar, ResourceCounter, RuleEditor, RuntimeDebugger, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, Select, SequenceBar, SequencerBoard, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SortableList, Spacer, Spinner, Split, SplitPane, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode, StatusDot, StatusEffect, SwipeableRow, Switch, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, ViolationAlert, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, drawSprite, isoToScreen, mapBookData, pendulum, projectileMotion, resolveFieldMap, screenToIso, springOscillator, useBattleState, useCamera, useGameAudio, useGameAudioContext, useImageCache } from '../chunk-4TXM7YAX.js';
4
+ import { VStack, HStack, Typography, Button, Icon, Box, Card, DataTable, Badge, Toast } from '../chunk-K43H3ZDY.js';
5
+ export { ALL_PRESETS, AR_BOOK_FIELDS, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, Breadcrumb, BuilderBoard, Button, ButtonGroup, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeView, CodeViewer, CombatLog, ComboCounter, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ControlButton, CounterTemplate, CraftingRecipe, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, DialogueBox, DialogueBubble, Divider, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, EmptyState, EnemyPlate, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FLOOR_HEIGHT, FilterGroup, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormField, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LawReferenceTooltip, Lightbox, LineChart, List, LoadingState, MapView, MarkdownContent, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, Navigation, NegotiatorBoard, NumberStepper, ObjectRulePanel, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PlatformerCanvas, Popover, PowerupSlots, ProgressBar, ProgressDots, PullToRefresh, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ResourceBar, ResourceCounter, RuleEditor, RuntimeDebugger, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, Select, SequenceBar, SequencerBoard, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SortableList, Spacer, Spinner, Split, SplitPane, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode, StatusDot, StatusEffect, SwipeableRow, Switch, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, ViolationAlert, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, drawSprite, isoToScreen, mapBookData, pendulum, projectileMotion, resolveFieldMap, screenToIso, springOscillator, useBattleState, useCamera, useGameAudio, useGameAudioContext, useImageCache } from '../chunk-K43H3ZDY.js';
6
6
  import '../chunk-4N3BAPDB.js';
7
7
  import '../chunk-DKQN5FVU.js';
8
- import { useTranslate } from '../chunk-QU2X55WH.js';
9
- export { EntityDataProvider, I18nProvider, createTranslate, entityDataKeys, parseQueryBinding, useAuthContext, useDragReorder, useEntity, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntitySuspense, useInfiniteScroll, useLongPress, usePullToRefresh, useQuerySingleton, useSwipeGesture, useTranslate } from '../chunk-QU2X55WH.js';
8
+ import { useTranslate } from '../chunk-CDIOHSKG.js';
9
+ export { EntityDataProvider, I18nProvider, createTranslate, entityDataKeys, parseQueryBinding, useAuthContext, useDragReorder, useEntity, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntitySuspense, useInfiniteScroll, useLongPress, usePullToRefresh, useQuerySingleton, useSwipeGesture, useTranslate } from '../chunk-CDIOHSKG.js';
10
10
  import { useEventBus } from '../chunk-YXZM3WCF.js';
11
11
  export { useEmitEvent, useEventBus, useEventListener } from '../chunk-YXZM3WCF.js';
12
12
  export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-3JGAROCW.js';
13
13
  import { cn } from '../chunk-XL7WB2O5.js';
14
14
  export { cn } from '../chunk-XL7WB2O5.js';
15
- import '../chunk-2XXSUIOK.js';
15
+ import '../chunk-QIABKRCN.js';
16
16
  import '../chunk-K2D5D3WK.js';
17
17
  import { __publicField } from '../chunk-PKBMQBKP.js';
18
18
  import React, { useRef, useCallback, useEffect, useState } from 'react';
@@ -969,7 +969,11 @@ function NotifyListener() {
969
969
  };
970
970
  const variant = severityMap[String(payload.severity)] || "info";
971
971
  const id = ++nextId;
972
- setItems((prev) => [...prev, { id, message, variant }]);
972
+ setItems((prev) => {
973
+ const last = prev[prev.length - 1];
974
+ if (last && last.message === message && last.variant === variant) return prev;
975
+ return [...prev, { id, message, variant }].slice(-4);
976
+ });
973
977
  });
974
978
  return unsubscribe;
975
979
  }, [eventBus]);
@@ -1,8 +1,8 @@
1
- export { ENTITY_EVENTS, useAgentChat, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useEntities, useEntitiesByType, useEntity as useEntityById, useEntityMutations, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInput, useOrbitalHistory, useOrbitalMutations, usePhysics, usePinchZoom, usePlayer, usePreview, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useUIEvents, useUpdateEntity, useValidation } from '../chunk-IRIGCHP4.js';
1
+ export { ENTITY_EVENTS, useAgentChat, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useEntities, useEntitiesByType, useEntity as useEntityById, useEntityMutations, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInput, useOrbitalHistory, useOrbitalMutations, usePhysics, usePinchZoom, usePlayer, usePreview, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useUIEvents, useUpdateEntity, useValidation } from '../chunk-SD3KVCY6.js';
2
2
  export { clearEntities, getAllEntities, getByType, getEntity, getSingleton, removeEntity, spawnEntity, updateEntity, updateSingleton } from '../chunk-N7MVUW4R.js';
3
3
  import '../chunk-3HJHHULT.js';
4
- export { EntityDataProvider, I18nProvider, createTranslate, entityDataKeys, parseQueryBinding, useAuthContext, useDragReorder, useEntity, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntitySuspense, useInfiniteScroll, useLongPress, usePullToRefresh, useQuerySingleton, useSwipeGesture, useTranslate } from '../chunk-QU2X55WH.js';
4
+ export { EntityDataProvider, I18nProvider, createTranslate, entityDataKeys, parseQueryBinding, useAuthContext, useDragReorder, useEntity, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntitySuspense, useInfiniteScroll, useLongPress, usePullToRefresh, useQuerySingleton, useSwipeGesture, useTranslate } from '../chunk-CDIOHSKG.js';
5
5
  export { useEmitEvent, useEventBus, useEventListener } from '../chunk-YXZM3WCF.js';
6
6
  export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-3JGAROCW.js';
7
- import '../chunk-2XXSUIOK.js';
7
+ import '../chunk-QIABKRCN.js';
8
8
  import '../chunk-PKBMQBKP.js';
@@ -1,4 +1,4 @@
1
- import { en_default } from '../chunk-2XXSUIOK.js';
1
+ import { en_default } from '../chunk-QIABKRCN.js';
2
2
  import '../chunk-PKBMQBKP.js';
3
3
 
4
4
  // locales/ar.json
@@ -1,11 +1,11 @@
1
- export { FetchedDataContext, FetchedDataProvider, OfflineModeProvider, OrbitalProvider, VerificationProvider, useFetchedData, useFetchedDataContext, useFetchedEntity, useOfflineMode, useOptionalOfflineMode } from '../chunk-UPU33AIX.js';
2
- import '../chunk-4TXM7YAX.js';
1
+ export { FetchedDataContext, FetchedDataProvider, OfflineModeProvider, OrbitalProvider, VerificationProvider, useFetchedData, useFetchedDataContext, useFetchedEntity, useOfflineMode, useOptionalOfflineMode } from '../chunk-GF6RQBO7.js';
2
+ import '../chunk-K43H3ZDY.js';
3
3
  import '../chunk-4N3BAPDB.js';
4
4
  import '../chunk-DKQN5FVU.js';
5
- export { SelectionContext, SelectionProvider, useSelection, useSelectionOptional } from '../chunk-QU2X55WH.js';
5
+ export { SelectionContext, SelectionProvider, useSelection, useSelectionOptional } from '../chunk-CDIOHSKG.js';
6
6
  export { EventBusContext, EventBusProvider } from '../chunk-YXZM3WCF.js';
7
7
  import '../chunk-3JGAROCW.js';
8
8
  import '../chunk-XL7WB2O5.js';
9
- import '../chunk-2XXSUIOK.js';
9
+ import '../chunk-QIABKRCN.js';
10
10
  import '../chunk-K2D5D3WK.js';
11
11
  import '../chunk-PKBMQBKP.js';
@@ -1,15 +1,15 @@
1
- import '../chunk-IRIGCHP4.js';
1
+ import '../chunk-SD3KVCY6.js';
2
2
  import '../chunk-N7MVUW4R.js';
3
3
  import '../chunk-3HJHHULT.js';
4
- import { useFetchedDataContext } from '../chunk-UPU33AIX.js';
5
- import '../chunk-4TXM7YAX.js';
4
+ import { useFetchedDataContext } from '../chunk-GF6RQBO7.js';
5
+ import '../chunk-K43H3ZDY.js';
6
6
  import '../chunk-4N3BAPDB.js';
7
7
  import '../chunk-DKQN5FVU.js';
8
- import '../chunk-QU2X55WH.js';
8
+ import '../chunk-CDIOHSKG.js';
9
9
  import { useEventBus } from '../chunk-YXZM3WCF.js';
10
10
  import '../chunk-3JGAROCW.js';
11
11
  import { registerTrait, unregisterTrait, updateTraitState, recordTransition } from '../chunk-XL7WB2O5.js';
12
- import '../chunk-2XXSUIOK.js';
12
+ import '../chunk-QIABKRCN.js';
13
13
  import '../chunk-K2D5D3WK.js';
14
14
  import '../chunk-PKBMQBKP.js';
15
15
  import { createContext, useMemo, useContext, useState, useRef, useEffect, useCallback } from 'react';
@@ -0,0 +1,117 @@
1
+ {
2
+ "$meta": { "locale": "ar", "direction": "rtl" },
3
+
4
+ "common.save": "حفظ",
5
+ "common.cancel": "إلغاء",
6
+ "common.delete": "حذف",
7
+ "common.close": "إغلاق",
8
+ "common.confirm": "هل أنت متأكد؟",
9
+ "common.create": "إنشاء",
10
+ "common.edit": "تعديل",
11
+ "common.view": "عرض",
12
+ "common.add": "إضافة",
13
+ "common.remove": "إزالة",
14
+ "common.search": "بحث...",
15
+ "common.filter": "تصفية",
16
+ "common.actions": "إجراءات",
17
+ "common.yes": "نعم",
18
+ "common.no": "لا",
19
+ "common.ok": "حسنًا",
20
+ "common.done": "تم",
21
+ "common.apply": "تطبيق",
22
+ "common.reset": "إعادة تعيين",
23
+ "common.refresh": "تحديث",
24
+ "common.export": "تصدير",
25
+ "common.import": "استيراد",
26
+ "common.copy": "نسخ",
27
+ "common.settings": "الإعدادات",
28
+
29
+ "nav.previous": "السابق",
30
+ "nav.next": "التالي",
31
+ "nav.back": "رجوع",
32
+ "nav.home": "الرئيسية",
33
+
34
+ "form.submit": "إرسال",
35
+ "form.saving": "جارٍ الحفظ...",
36
+ "form.required": "هذا الحقل مطلوب",
37
+ "form.invalidEmail": "أدخل بريدًا إلكترونيًا صحيحًا",
38
+ "form.selectPlaceholder": "اختر {{label}}...",
39
+ "form.searchPlaceholder": "ابحث عن {{entity}}...",
40
+
41
+ "table.empty.title": "لا توجد عناصر",
42
+ "table.empty.description": "لا توجد عناصر للعرض.",
43
+ "table.search.placeholder": "بحث...",
44
+ "table.pagination.showing": "عرض {{start}} إلى {{end}} من {{total}} نتيجة",
45
+ "table.pagination.page": "صفحة {{page}} من {{totalPages}}",
46
+ "table.bulk.selected": "{{count}} محدد",
47
+ "table.loading": "جارٍ التحميل...",
48
+
49
+ "status.loading": "جارٍ التحميل...",
50
+ "status.scheduled": "مجدول",
51
+ "status.inProgress": "قيد التنفيذ",
52
+ "status.completed": "مكتمل",
53
+ "status.cancelled": "ملغى",
54
+ "status.pending": "قيد الانتظار",
55
+ "status.active": "نشط",
56
+ "status.inactive": "غير نشط",
57
+ "status.draft": "مسودة",
58
+ "status.archived": "مؤرشف",
59
+
60
+ "error.generic": "حدث خطأ ما",
61
+ "error.retry": "حاول مرة أخرى",
62
+ "error.notFound": "غير موجود",
63
+ "error.loadFailed": "فشل التحميل: {{message}}",
64
+ "error.configMissing": "لم يتم العثور على الإعداد: {{id}}",
65
+
66
+ "common.loading": "جارٍ التحميل...",
67
+ "common.saveChanges": "حفظ التغييرات",
68
+ "common.retry": "إعادة المحاولة",
69
+ "common.open": "فتح",
70
+ "common.back": "رجوع",
71
+
72
+ "empty.noItems": "لا توجد عناصر",
73
+ "empty.noData": "لا توجد بيانات",
74
+ "empty.noItemsYet": "لا توجد عناصر بعد",
75
+ "empty.noItemsAdded": "لم تتم إضافة عناصر بعد",
76
+ "empty.noOptionsFound": "لم يتم العثور على خيارات",
77
+
78
+ "list.addItemPlaceholder": "إضافة عنصر جديد...",
79
+
80
+ "error.occurred": "حدث خطأ",
81
+ "error.failedToLoad": "فشل تحميل البيانات",
82
+
83
+ "wizard.back": "رجوع",
84
+ "wizard.next": "التالي",
85
+ "wizard.complete": "إكمال",
86
+ "wizard.stepOf": "الخطوة {{current}} من {{total}}",
87
+
88
+ "pagination.previous": "السابق",
89
+ "pagination.next": "التالي",
90
+ "pagination.total": "المجموع:",
91
+ "pagination.show": "عرض:",
92
+ "pagination.goTo": "الانتقال إلى:",
93
+ "pagination.go": "انتقال",
94
+
95
+ "auth.signIn": "تسجيل الدخول",
96
+ "auth.signOut": "تسجيل الخروج",
97
+
98
+ "dialog.confirm": "تأكيد",
99
+ "dialog.cancel": "إلغاء",
100
+ "dialog.loading": "جارٍ التحميل...",
101
+ "dialog.delete.title": "حذف {{item}}؟",
102
+ "dialog.delete.message": "لا يمكن التراجع عن هذا الإجراء.",
103
+
104
+ "trait.availableActions": "الإجراءات المتاحة",
105
+ "trait.transitions": "الانتقالات",
106
+ "trait.availableNow": "متاح الآن",
107
+
108
+ "book.startReading": "ابدأ القراءة",
109
+ "book.tableOfContents": "فهرس المحتويات",
110
+ "book.partNumber": "الجزء {{number}}",
111
+ "book.print": "طباعة",
112
+ "book.previousPage": "الصفحة السابقة",
113
+ "book.nextPage": "الصفحة التالية",
114
+
115
+ "quiz.showAnswer": "أظهر الإجابة",
116
+ "quiz.hideAnswer": "أخفِ الإجابة"
117
+ }
@@ -0,0 +1,121 @@
1
+ {
2
+ "$meta": { "locale": "en", "direction": "ltr" },
3
+
4
+ "common.save": "Save",
5
+ "common.cancel": "Cancel",
6
+ "common.delete": "Delete",
7
+ "common.close": "Close",
8
+ "common.confirm": "Are you sure?",
9
+ "common.create": "Create",
10
+ "common.edit": "Edit",
11
+ "common.view": "View",
12
+ "common.add": "Add",
13
+ "common.remove": "Remove",
14
+ "common.search": "Search...",
15
+ "common.filter": "Filter",
16
+ "common.actions": "Actions",
17
+ "common.yes": "Yes",
18
+ "common.no": "No",
19
+ "common.selected": "selected",
20
+ "common.ok": "OK",
21
+ "common.done": "Done",
22
+ "common.apply": "Apply",
23
+ "common.reset": "Reset",
24
+ "common.refresh": "Refresh",
25
+ "common.export": "Export",
26
+ "common.import": "Import",
27
+ "common.copy": "Copy",
28
+ "common.settings": "Settings",
29
+
30
+ "nav.previous": "Previous",
31
+ "nav.next": "Next",
32
+ "nav.back": "Back",
33
+ "nav.home": "Home",
34
+
35
+ "form.submit": "Submit",
36
+ "form.saving": "Saving...",
37
+ "form.required": "This field is required",
38
+ "form.invalidEmail": "Enter a valid email address",
39
+ "form.selectPlaceholder": "Select {{label}}...",
40
+ "form.searchPlaceholder": "Search {{entity}}...",
41
+
42
+ "table.empty.title": "No items found",
43
+ "table.empty.description": "No items to display.",
44
+ "table.search.placeholder": "Search...",
45
+ "table.pagination.showing": "Showing {{start}} to {{end}} of {{total}} results",
46
+ "table.pagination.page": "Page {{page}} of {{totalPages}}",
47
+ "table.bulk.selected": "{{count}} selected",
48
+ "table.loading": "Loading...",
49
+
50
+ "status.loading": "Loading...",
51
+ "status.scheduled": "Scheduled",
52
+ "status.inProgress": "In Progress",
53
+ "status.completed": "Completed",
54
+ "status.cancelled": "Cancelled",
55
+ "status.pending": "Pending",
56
+ "status.active": "Active",
57
+ "status.inactive": "Inactive",
58
+ "status.draft": "Draft",
59
+ "status.archived": "Archived",
60
+
61
+ "error.generic": "Something went wrong",
62
+ "error.retry": "Try again",
63
+ "error.notFound": "Not found",
64
+ "error.loadFailed": "Failed to load: {{message}}",
65
+ "error.configMissing": "Configuration not found for: {{id}}",
66
+
67
+ "common.loading": "Loading...",
68
+ "common.showMore": "Show More",
69
+ "common.showLess": "Show Less",
70
+ "common.noResults": "No results found",
71
+ "common.saveChanges": "Save Changes",
72
+ "common.retry": "Retry",
73
+ "common.open": "Open",
74
+ "common.back": "Back",
75
+
76
+ "empty.noItems": "No items",
77
+ "empty.noData": "No data available",
78
+ "empty.noItemsYet": "No items yet",
79
+ "empty.noItemsAdded": "No items added yet",
80
+ "empty.noOptionsFound": "No options found",
81
+
82
+ "list.addItemPlaceholder": "Add new item...",
83
+
84
+ "error.occurred": "An error occurred",
85
+ "error.failedToLoad": "Failed to load data",
86
+
87
+ "wizard.back": "Back",
88
+ "wizard.next": "Next",
89
+ "wizard.complete": "Complete",
90
+ "wizard.stepOf": "Step {{current}} of {{total}}",
91
+
92
+ "pagination.previous": "Previous",
93
+ "pagination.next": "Next",
94
+ "pagination.total": "Total:",
95
+ "pagination.show": "Show:",
96
+ "pagination.goTo": "Go to:",
97
+ "pagination.go": "Go",
98
+
99
+ "auth.signIn": "Sign in",
100
+ "auth.signOut": "Sign out",
101
+
102
+ "dialog.confirm": "Confirm",
103
+ "dialog.cancel": "Cancel",
104
+ "dialog.loading": "Loading...",
105
+ "dialog.delete.title": "Delete {{item}}?",
106
+ "dialog.delete.message": "This action cannot be undone.",
107
+
108
+ "trait.availableActions": "Available Actions",
109
+ "trait.transitions": "Transitions",
110
+ "trait.availableNow": "Available now",
111
+
112
+ "book.startReading": "Start Reading",
113
+ "book.tableOfContents": "Table of Contents",
114
+ "book.partNumber": "Part {{number}}",
115
+ "book.print": "Print",
116
+ "book.previousPage": "Previous page",
117
+ "book.nextPage": "Next page",
118
+
119
+ "quiz.showAnswer": "Show answer",
120
+ "quiz.hideAnswer": "Hide answer"
121
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Core locale loader for @almadar/ui.
3
+ *
4
+ * Exports message maps for en/ar/sl and a helper to merge
5
+ * project-specific messages on top of core.
6
+ */
7
+
8
+ import en from './en.json';
9
+ import ar from './ar.json';
10
+ import sl from './sl.json';
11
+
12
+ export type SupportedLocale = 'en' | 'ar' | 'sl';
13
+
14
+ export interface LocaleMeta {
15
+ locale: string;
16
+ direction: 'ltr' | 'rtl';
17
+ }
18
+
19
+ /** Core messages keyed by locale */
20
+ export const coreMessages: Record<SupportedLocale, Record<string, string>> = {
21
+ en: stripMeta(en),
22
+ ar: stripMeta(ar),
23
+ sl: stripMeta(sl),
24
+ };
25
+
26
+ /** Locale metadata */
27
+ export const localeMeta: Record<SupportedLocale, LocaleMeta> = {
28
+ en: { locale: 'en', direction: 'ltr' },
29
+ ar: { locale: 'ar', direction: 'rtl' },
30
+ sl: { locale: 'sl', direction: 'ltr' },
31
+ };
32
+
33
+ /**
34
+ * Merge core messages with project-specific messages.
35
+ * Project keys override core keys.
36
+ */
37
+ export function mergeMessages(
38
+ locale: SupportedLocale,
39
+ projectMessages: Record<string, string>,
40
+ ): Record<string, string> {
41
+ return { ...coreMessages[locale], ...stripMeta(projectMessages) };
42
+ }
43
+
44
+ /** Remove $meta and $extends keys from a messages object */
45
+ function stripMeta(obj: Record<string, unknown>): Record<string, string> {
46
+ const result: Record<string, string> = {};
47
+ for (const [key, value] of Object.entries(obj)) {
48
+ if (key.startsWith('$')) continue;
49
+ if (typeof value === 'string') {
50
+ result[key] = value;
51
+ }
52
+ }
53
+ return result;
54
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "$meta": { "locale": "sl", "direction": "ltr" },
3
+
4
+ "common.save": "Shrani",
5
+ "common.cancel": "Prekliči",
6
+ "common.delete": "Izbriši",
7
+ "common.close": "Zapri",
8
+ "common.confirm": "Ali ste prepričani?",
9
+ "common.create": "Ustvari",
10
+ "common.edit": "Uredi",
11
+ "common.view": "Prikaži",
12
+ "common.add": "Dodaj",
13
+ "common.remove": "Odstrani",
14
+ "common.search": "Iskanje...",
15
+ "common.filter": "Filtriraj",
16
+ "common.actions": "Dejanja",
17
+ "common.yes": "Da",
18
+ "common.no": "Ne",
19
+ "common.ok": "V redu",
20
+ "common.done": "Končano",
21
+ "common.apply": "Uporabi",
22
+ "common.reset": "Ponastavi",
23
+ "common.refresh": "Osveži",
24
+ "common.export": "Izvozi",
25
+ "common.import": "Uvozi",
26
+ "common.copy": "Kopiraj",
27
+ "common.settings": "Nastavitve",
28
+
29
+ "nav.previous": "Prejšnji",
30
+ "nav.next": "Naslednji",
31
+ "nav.back": "Nazaj",
32
+ "nav.home": "Domov",
33
+
34
+ "form.submit": "Pošlji",
35
+ "form.saving": "Shranjujem...",
36
+ "form.required": "To polje je obvezno",
37
+ "form.invalidEmail": "Vnesite veljaven e-poštni naslov",
38
+ "form.selectPlaceholder": "Izberite {{label}}...",
39
+ "form.searchPlaceholder": "Iskanje {{entity}}...",
40
+
41
+ "table.empty.title": "Ni najdenih elementov",
42
+ "table.empty.description": "Ni elementov za prikaz.",
43
+ "table.search.placeholder": "Iskanje...",
44
+ "table.pagination.showing": "Prikazujem {{start}} do {{end}} od {{total}} rezultatov",
45
+ "table.pagination.page": "Stran {{page}} od {{totalPages}}",
46
+ "table.bulk.selected": "{{count}} izbranih",
47
+ "table.loading": "Nalagam...",
48
+
49
+ "status.loading": "Nalagam...",
50
+ "status.scheduled": "Načrtovano",
51
+ "status.inProgress": "V izvajanju",
52
+ "status.completed": "Zaključeno",
53
+ "status.cancelled": "Preklicano",
54
+ "status.pending": "V čakanju",
55
+ "status.active": "Aktivno",
56
+ "status.inactive": "Neaktivno",
57
+ "status.draft": "Osnutek",
58
+ "status.archived": "Arhivirano",
59
+
60
+ "error.generic": "Nekaj je šlo narobe",
61
+ "error.retry": "Poskusite znova",
62
+ "error.notFound": "Ni najdeno",
63
+ "error.loadFailed": "Nalaganje ni uspelo: {{message}}",
64
+ "error.configMissing": "Konfiguracija ni najdena za: {{id}}",
65
+
66
+ "common.loading": "Nalagam...",
67
+ "common.saveChanges": "Shrani spremembe",
68
+ "common.retry": "Poskusi znova",
69
+ "common.open": "Odpri",
70
+ "common.back": "Nazaj",
71
+
72
+ "empty.noItems": "Ni elementov",
73
+ "empty.noData": "Ni podatkov",
74
+ "empty.noItemsYet": "Še ni elementov",
75
+ "empty.noItemsAdded": "Še ni dodanih elementov",
76
+ "empty.noOptionsFound": "Ni najdenih možnosti",
77
+
78
+ "list.addItemPlaceholder": "Dodaj nov element...",
79
+
80
+ "error.occurred": "Prišlo je do napake",
81
+ "error.failedToLoad": "Nalaganje podatkov ni uspelo",
82
+
83
+ "wizard.back": "Nazaj",
84
+ "wizard.next": "Naprej",
85
+ "wizard.complete": "Zaključi",
86
+ "wizard.stepOf": "Korak {{current}} od {{total}}",
87
+
88
+ "pagination.previous": "Prejšnji",
89
+ "pagination.next": "Naslednji",
90
+ "pagination.total": "Skupaj:",
91
+ "pagination.show": "Prikaži:",
92
+ "pagination.goTo": "Pojdi na:",
93
+ "pagination.go": "Pojdi",
94
+
95
+ "auth.signIn": "Prijava",
96
+ "auth.signOut": "Odjava",
97
+
98
+ "dialog.confirm": "Potrdi",
99
+ "dialog.cancel": "Prekliči",
100
+ "dialog.loading": "Nalagam...",
101
+ "dialog.delete.title": "Izbrisati {{item}}?",
102
+ "dialog.delete.message": "Tega dejanja ni mogoče razveljaviti.",
103
+
104
+ "trait.availableActions": "Razpoložljive akcije",
105
+ "trait.transitions": "Prehodi",
106
+ "trait.availableNow": "Trenutno na voljo",
107
+
108
+ "book.startReading": "Začni brati",
109
+ "book.tableOfContents": "Kazalo vsebine",
110
+ "book.partNumber": "Del {{number}}",
111
+ "book.print": "Natisni",
112
+ "book.previousPage": "Prejšnja stran",
113
+ "book.nextPage": "Naslednja stran",
114
+
115
+ "quiz.showAnswer": "Prikaži odgovor",
116
+ "quiz.hideAnswer": "Skrij odgovor"
117
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "2.15.5",
3
+ "version": "2.15.7",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "main": "./dist/components/index.js",
@@ -75,11 +75,17 @@
75
75
  "import": "./dist/locales/index.js",
76
76
  "require": "./dist/locales/index.js"
77
77
  },
78
- "./index.css": "./index.css"
78
+ "./locales/en.json": "./locales/en.json",
79
+ "./locales/ar.json": "./locales/ar.json",
80
+ "./locales/sl.json": "./locales/sl.json",
81
+ "./index.css": "./index.css",
82
+ "./tailwind-preset": "./tailwind-preset.cjs"
79
83
  },
80
84
  "files": [
81
85
  "dist",
82
- "themes"
86
+ "themes",
87
+ "locales",
88
+ "tailwind-preset.cjs"
83
89
  ],
84
90
  "publishConfig": {
85
91
  "registry": "https://registry.npmjs.org",
@@ -0,0 +1,243 @@
1
+ /**
2
+ * @almadar/ui Tailwind Preset
3
+ *
4
+ * Provides the complete Almadar design token system as a Tailwind preset.
5
+ * Includes a safelist of all CSS-variable-based arbitrary classes used by
6
+ * @almadar/ui components so Tailwind generates them without scanning node_modules.
7
+ *
8
+ * Usage in tailwind.config.js:
9
+ * presets: [require('@almadar/ui/tailwind-preset')]
10
+ */
11
+
12
+ /** @type {import('tailwindcss').Config} */
13
+ module.exports = {
14
+ darkMode: 'class',
15
+ safelist: [
16
+ 'accent-[var(--color-foreground)]',
17
+ 'accent-[var(--color-primary)]',
18
+ 'active:bg-[var(--color-muted)]',
19
+ 'active:bg-[var(--color-primary)]',
20
+ 'active:scale-[var(--active-scale)]',
21
+ 'active:shadow-[var(--shadow-active)]',
22
+ 'active:text-[var(--color-primary-foreground)]',
23
+ 'bg-[var(--color-accent)]',
24
+ 'bg-[var(--color-background)]',
25
+ 'bg-[var(--color-border)]',
26
+ 'bg-[var(--color-card)]',
27
+ 'bg-[var(--color-error)]',
28
+ 'bg-[var(--color-foreground)]',
29
+ 'bg-[var(--color-info)]',
30
+ 'bg-[var(--color-muted)]',
31
+ 'bg-[var(--color-muted-foreground)]',
32
+ ':bg-[var(--color-primary)]',
33
+ 'bg-[var(--color-primary)]',
34
+ 'bg-[var(--color-primary-foreground)]',
35
+ 'bg-[var(--color-secondary)]',
36
+ 'bg-[var(--color-success)]',
37
+ 'bg-[var(--color-surface)]',
38
+ 'bg-[var(--color-table-header)]',
39
+ 'bg-[var(--color-warning)]',
40
+ 'border-b-[length:var(--border-width)]',
41
+ 'border-b-[var(--color-foreground)]',
42
+ 'border-b-[var(--color-primary)]',
43
+ 'border-[length:var(--border-width)]',
44
+ 'border-[length:var(--border-width-thin)]',
45
+ 'border-l-[length:var(--border-width)]',
46
+ 'border-l-[var(--color-foreground)]',
47
+ 'border-l-[var(--color-primary)]',
48
+ 'border-r-[length:var(--border-width)]',
49
+ 'border-r-[var(--color-foreground)]',
50
+ 'border-r-[var(--color-primary)]',
51
+ 'border-t-[length:var(--border-width)]',
52
+ 'border-t-[var(--color-foreground)]',
53
+ 'border-t-[var(--color-primary)]',
54
+ 'border-[var(--color-accent)]',
55
+ ':border-[var(--color-border)]',
56
+ 'border-[var(--color-border)]',
57
+ 'border-[var(--color-card)]',
58
+ 'border-[var(--color-error)]',
59
+ 'border-[var(--color-foreground)]',
60
+ 'border-[var(--color-info)]',
61
+ ':border-[var(--color-primary)]',
62
+ 'border-[var(--color-primary)]',
63
+ 'border-[var(--color-success)]',
64
+ 'border-[var(--color-table-border)]',
65
+ 'border-[var(--color-warning)]',
66
+ 'border-x-[length:var(--border-width)]',
67
+ 'checked:bg-[var(--color-primary)]',
68
+ 'dark:bg-[var(--color-background)]',
69
+ 'dark:bg-[var(--color-card)]',
70
+ 'dark:bg-[var(--color-foreground)]',
71
+ 'dark:bg-[var(--color-muted)]',
72
+ 'dark:border-[var(--color-border)]',
73
+ 'dark:hover:bg-[var(--color-error)]',
74
+ 'dark:hover:bg-[var(--color-muted)]',
75
+ 'dark:text-[var(--color-error)]',
76
+ 'dark:text-[var(--color-foreground)]',
77
+ 'dark:text-[var(--color-muted-foreground)]',
78
+ 'disabled:bg-[var(--color-muted)]',
79
+ 'disabled:text-[var(--color-muted-foreground)]',
80
+ 'duration-[var(--transition-fast)]',
81
+ 'duration-[var(--transition-normal)]',
82
+ 'fill-[var(--color-warning)]',
83
+ 'focus:bg-[var(--color-card)]',
84
+ 'focus:bg-[var(--color-muted)]',
85
+ 'focus:border-[var(--color-error)]',
86
+ 'focus:border-[var(--color-primary)]',
87
+ 'focus:border-[var(--color-ring)]',
88
+ 'focus:ring-[length:var(--focus-ring-width)]',
89
+ 'focus:ring-offset-[length:var(--focus-ring-offset)]',
90
+ 'focus:ring-[var(--color-error)]',
91
+ 'focus:ring-[var(--color-ring)]',
92
+ 'font-[var(--font-weight-bold)]',
93
+ 'font-[var(--font-weight-medium)]',
94
+ 'from-[var(--color-muted)]',
95
+ 'group-hover:bg-[var(--color-foreground)]',
96
+ 'group-hover:text-[var(--color-foreground)]',
97
+ 'group-hover:text-[var(--color-muted-foreground)]',
98
+ 'hover:bg-[var(--color-error)]',
99
+ 'hover:bg-[var(--color-muted)]',
100
+ 'hover:bg-[var(--color-muted-foreground)]',
101
+ 'hover:bg-[var(--color-primary)]',
102
+ 'hover:bg-[var(--color-primary-hover)]',
103
+ 'hover:bg-[var(--color-secondary-hover)]',
104
+ 'hover:bg-[var(--color-success)]',
105
+ 'hover:bg-[var(--color-surface)]',
106
+ 'hover:bg-[var(--color-surface-hover)]',
107
+ 'hover:bg-[var(--color-table-row-hover)]',
108
+ 'hover:bg-[var(--color-warning)]',
109
+ 'hover:border-[var(--color-border)]',
110
+ 'hover:border-[var(--color-border-hover)]',
111
+ 'hover:border-[var(--color-muted-foreground)]',
112
+ 'hover:border-[var(--color-primary)]',
113
+ 'hover:ring-[var(--color-ring)]',
114
+ 'hover:shadow-[var(--shadow-hover)]',
115
+ 'hover:shadow-[var(--shadow-sm)]',
116
+ 'hover:text-[var(--color-error)]',
117
+ 'hover:text-[var(--color-error-foreground)]',
118
+ 'hover:text-[var(--color-foreground)]',
119
+ 'hover:text-[var(--color-primary)]',
120
+ 'hover:text-[var(--color-success-foreground)]',
121
+ 'hover:text-[var(--color-warning-foreground)]',
122
+ 'peer-focus:ring-[var(--color-error)]',
123
+ 'peer-focus:ring-[var(--color-ring)]',
124
+ 'placeholder:text-[var(--color-muted-foreground)]',
125
+ 'placeholder:text-[var(--color-placeholder)]',
126
+ 'ring-[var(--color-accent)]',
127
+ 'ring-[var(--color-error)]',
128
+ 'ring-[var(--color-info)]',
129
+ 'ring-[var(--color-muted-foreground)]',
130
+ 'ring-[var(--color-primary)]',
131
+ 'ring-[var(--color-success)]',
132
+ 'ring-[var(--color-warning)]',
133
+ 'rounded-l-[var(--radius-sm)]',
134
+ 'rounded-r-[var(--radius-sm)]',
135
+ 'rounded-t-[var(--radius-lg)]',
136
+ 'rounded-t-[var(--radius-sm)]',
137
+ 'rounded-[var(--radius-full)]',
138
+ 'rounded-[var(--radius-lg)]',
139
+ 'rounded-[var(--radius-md)]',
140
+ 'rounded-[var(--radius-sm)]',
141
+ 'rounded-[var(--radius-xl)]',
142
+ 'shadow-[var(--shadow-lg)]',
143
+ 'shadow-[var(--shadow-main)]',
144
+ 'shadow-[var(--shadow-sm)]',
145
+ 'text-[var(--color-accent)]',
146
+ 'text-[var(--color-accent-foreground)]',
147
+ 'text-[var(--color-background)]',
148
+ 'text-[var(--color-card-foreground)]',
149
+ 'text-[var(--color-error)]',
150
+ 'text-[var(--color-error-foreground)]',
151
+ 'text-[var(--color-foreground)]',
152
+ 'text-[var(--color-info)]',
153
+ 'text-[var(--color-info-foreground)]',
154
+ 'text-[var(--color-muted)]',
155
+ 'text-[var(--color-muted-foreground)]',
156
+ 'text-[var(--color-primary)]',
157
+ ':text-[var(--color-primary-foreground)]',
158
+ 'text-[var(--color-primary-foreground)]',
159
+ 'text-[var(--color-secondary-foreground)]',
160
+ 'text-[var(--color-success)]',
161
+ 'text-[var(--color-warning)]',
162
+ 'text-[var(--color-warning-foreground)]',
163
+ 'to-[var(--color-accent)]',
164
+ ],
165
+ theme: {
166
+ fontFamily: {
167
+ sans: ['var(--font-family)', 'ui-sans-serif', 'system-ui', 'sans-serif'],
168
+ mono: ['var(--font-family-mono, ui-monospace)', 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'monospace'],
169
+ },
170
+ extend: {
171
+ colors: {
172
+ primary: {
173
+ DEFAULT: 'var(--color-primary)',
174
+ foreground: 'var(--color-primary-foreground)',
175
+ hover: 'var(--color-primary-hover)',
176
+ },
177
+ secondary: {
178
+ DEFAULT: 'var(--color-secondary)',
179
+ foreground: 'var(--color-secondary-foreground)',
180
+ hover: 'var(--color-secondary-hover)',
181
+ },
182
+ muted: {
183
+ DEFAULT: 'var(--color-muted)',
184
+ foreground: 'var(--color-muted-foreground)',
185
+ },
186
+ accent: {
187
+ DEFAULT: 'var(--color-accent)',
188
+ foreground: 'var(--color-accent-foreground)',
189
+ },
190
+ background: 'var(--color-background)',
191
+ foreground: 'var(--color-foreground)',
192
+ card: {
193
+ DEFAULT: 'var(--color-card)',
194
+ foreground: 'var(--color-card-foreground)',
195
+ },
196
+ surface: 'var(--color-surface)',
197
+ border: 'var(--color-border)',
198
+ input: 'var(--color-input)',
199
+ ring: 'var(--color-ring)',
200
+ error: {
201
+ DEFAULT: 'var(--color-error)',
202
+ foreground: 'var(--color-error-foreground)',
203
+ },
204
+ success: {
205
+ DEFAULT: 'var(--color-success)',
206
+ foreground: 'var(--color-success-foreground)',
207
+ },
208
+ warning: {
209
+ DEFAULT: 'var(--color-warning)',
210
+ foreground: 'var(--color-warning-foreground)',
211
+ },
212
+ info: {
213
+ DEFAULT: 'var(--color-info)',
214
+ foreground: 'var(--color-info-foreground)',
215
+ },
216
+ },
217
+ borderRadius: {
218
+ none: 'var(--radius-none, 0)',
219
+ sm: 'var(--radius-sm)',
220
+ md: 'var(--radius-md)',
221
+ lg: 'var(--radius-lg)',
222
+ xl: 'var(--radius-xl)',
223
+ full: 'var(--radius-full)',
224
+ },
225
+ boxShadow: {
226
+ sm: 'var(--shadow-sm)',
227
+ DEFAULT: 'var(--shadow-main)',
228
+ lg: 'var(--shadow-lg)',
229
+ inner: 'var(--shadow-inner)',
230
+ },
231
+ fontWeight: {
232
+ normal: 'var(--font-weight-normal, 400)',
233
+ medium: 'var(--font-weight-medium, 500)',
234
+ bold: 'var(--font-weight-bold, 600)',
235
+ },
236
+ transitionDuration: {
237
+ fast: 'var(--transition-fast, 150ms)',
238
+ normal: 'var(--transition-normal, 250ms)',
239
+ slow: 'var(--transition-slow, 400ms)',
240
+ },
241
+ },
242
+ },
243
+ };