@godxjp/ui 5.0.2 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +101 -142
  2. package/dist/app/index.d.ts +140 -0
  3. package/dist/app/index.js +38 -0
  4. package/dist/app.prop-IobwLwaM.d.ts +90 -0
  5. package/dist/checkbox-NkFkqsQ8.d.ts +13 -0
  6. package/dist/chunk-2XW7J3EI.js +226 -0
  7. package/dist/chunk-3F2AKYRD.js +416 -0
  8. package/dist/chunk-3KPEZ5CF.js +37 -0
  9. package/dist/chunk-3UGU5TYP.js +89 -0
  10. package/dist/chunk-6RA3KSVK.js +588 -0
  11. package/dist/chunk-7NZFVD24.js +122 -0
  12. package/dist/chunk-7PWBC4BY.js +25 -0
  13. package/dist/chunk-7S7MYFXE.js +61 -0
  14. package/dist/chunk-7WRZG2IG.js +71 -0
  15. package/dist/chunk-B775Y6BE.js +1 -0
  16. package/dist/chunk-BHV2FUOA.js +111 -0
  17. package/dist/chunk-BI3HERR7.js +70 -0
  18. package/dist/chunk-BPSKQUL2.js +68 -0
  19. package/dist/chunk-CDWPQ5RP.js +187 -0
  20. package/dist/chunk-CP2LET6N.js +244 -0
  21. package/dist/chunk-CQBADMFG.js +20 -0
  22. package/dist/chunk-CRERCLIZ.js +33 -0
  23. package/dist/chunk-DU6ZYZRP.js +238 -0
  24. package/dist/chunk-DY5C44UP.js +55 -0
  25. package/dist/chunk-E4HJNQ62.js +117 -0
  26. package/dist/chunk-E76QIYSY.js +93 -0
  27. package/dist/chunk-F7PG4OEV.js +37 -0
  28. package/dist/chunk-GDSVW62T.js +171 -0
  29. package/dist/chunk-H2FHJOLU.js +178 -0
  30. package/dist/chunk-HJEBRCXL.js +55 -0
  31. package/dist/chunk-ICM6XBST.js +16 -0
  32. package/dist/chunk-IK7I3ABN.js +88 -0
  33. package/dist/chunk-L6J44O74.js +144 -0
  34. package/dist/chunk-LDSLS6HE.js +1 -0
  35. package/dist/chunk-LVNUHUEZ.js +191 -0
  36. package/dist/chunk-M64MVRLS.js +92 -0
  37. package/dist/chunk-NGQW3KEM.js +402 -0
  38. package/dist/chunk-NZ4FOC5N.js +559 -0
  39. package/dist/chunk-PIIRNAXA.js +26 -0
  40. package/dist/chunk-S66TJXJU.js +33 -0
  41. package/dist/chunk-SMLKNECP.js +133 -0
  42. package/dist/chunk-TAHBM3F2.js +66 -0
  43. package/dist/chunk-TO33OY4L.js +150 -0
  44. package/dist/chunk-TO7URV7U.js +51 -0
  45. package/dist/chunk-TOO5AEKL.js +81 -0
  46. package/dist/chunk-U3GHAOIJ.js +299 -0
  47. package/dist/chunk-U7N2A7A3.js +9 -0
  48. package/dist/chunk-UX634MYF.js +123 -0
  49. package/dist/chunk-V6UWJKZF.js +28 -0
  50. package/dist/chunk-VOHTRR5X.js +28 -0
  51. package/dist/chunk-WRFKVUPW.js +332 -0
  52. package/dist/chunk-WXW43RK5.js +24 -0
  53. package/dist/chunk-XG7XDYIM.js +60 -0
  54. package/dist/chunk-YFCQKO3B.js +842 -0
  55. package/dist/chunk-ZDWXGWLY.js +73 -0
  56. package/dist/chunk-ZLK5SPT6.js +11 -0
  57. package/dist/chunk-ZS6DTAM2.js +31 -0
  58. package/dist/chunk-ZT5UEUBO.js +1 -0
  59. package/dist/components/admin/index.d.ts +80 -0
  60. package/dist/components/admin/index.js +38 -0
  61. package/dist/components/data-display/badge.d.ts +12 -0
  62. package/dist/components/data-display/badge.js +3 -0
  63. package/dist/components/data-display/card.d.ts +87 -0
  64. package/dist/components/data-display/card.js +2 -0
  65. package/dist/components/data-display/index.d.ts +72 -0
  66. package/dist/components/data-display/index.js +89 -0
  67. package/dist/components/data-display/popover.d.ts +13 -0
  68. package/dist/components/data-display/popover.js +2 -0
  69. package/dist/components/data-display/scroll-area.d.ts +7 -0
  70. package/dist/components/data-display/scroll-area.js +2 -0
  71. package/dist/components/data-display/table.d.ts +10 -0
  72. package/dist/components/data-display/table.js +3 -0
  73. package/dist/components/data-entry/autocomplete.d.ts +16 -0
  74. package/dist/components/data-entry/autocomplete.js +8 -0
  75. package/dist/components/data-entry/calendar.d.ts +16 -0
  76. package/dist/components/data-entry/calendar.js +4 -0
  77. package/dist/components/data-entry/cascader.d.ts +32 -0
  78. package/dist/components/data-entry/cascader.js +13 -0
  79. package/dist/components/data-entry/checkbox.d.ts +13 -0
  80. package/dist/components/data-entry/checkbox.js +4 -0
  81. package/dist/components/data-entry/color-picker.d.ts +16 -0
  82. package/dist/components/data-entry/color-picker.js +6 -0
  83. package/dist/components/data-entry/command.d.ts +69 -0
  84. package/dist/components/data-entry/command.js +3 -0
  85. package/dist/components/data-entry/date-picker.d.ts +16 -0
  86. package/dist/components/data-entry/date-picker.js +8 -0
  87. package/dist/components/data-entry/date-range-picker.d.ts +16 -0
  88. package/dist/components/data-entry/date-range-picker.js +8 -0
  89. package/dist/components/data-entry/index.d.ts +53 -0
  90. package/dist/components/data-entry/index.js +152 -0
  91. package/dist/components/data-entry/input.d.ts +6 -0
  92. package/dist/components/data-entry/input.js +2 -0
  93. package/dist/components/data-entry/label.d.ts +8 -0
  94. package/dist/components/data-entry/label.js +2 -0
  95. package/dist/components/data-entry/radio.d.ts +24 -0
  96. package/dist/components/data-entry/radio.js +4 -0
  97. package/dist/components/data-entry/select.d.ts +18 -0
  98. package/dist/components/data-entry/select.js +3 -0
  99. package/dist/components/data-entry/slider.d.ts +16 -0
  100. package/dist/components/data-entry/slider.js +2 -0
  101. package/dist/components/data-entry/switch.d.ts +17 -0
  102. package/dist/components/data-entry/switch.js +2 -0
  103. package/dist/components/data-entry/textarea.d.ts +6 -0
  104. package/dist/components/data-entry/textarea.js +3 -0
  105. package/dist/components/data-entry/time-picker.d.ts +16 -0
  106. package/dist/components/data-entry/time-picker.js +7 -0
  107. package/dist/components/data-entry/transfer.d.ts +17 -0
  108. package/dist/components/data-entry/transfer.js +11 -0
  109. package/dist/components/data-entry/tree-select.d.ts +26 -0
  110. package/dist/components/data-entry/tree-select.js +13 -0
  111. package/dist/components/data-entry/upload.d.ts +42 -0
  112. package/dist/components/data-entry/upload.js +11 -0
  113. package/dist/components/feedback/alert.d.ts +60 -0
  114. package/dist/components/feedback/alert.js +7 -0
  115. package/dist/components/feedback/dialog.d.ts +64 -0
  116. package/dist/components/feedback/dialog.js +7 -0
  117. package/dist/components/feedback/index.d.ts +16 -0
  118. package/dist/components/feedback/index.js +14 -0
  119. package/dist/components/feedback/sheet.d.ts +24 -0
  120. package/dist/components/feedback/sheet.js +2 -0
  121. package/dist/components/feedback/sonner.d.ts +6 -0
  122. package/dist/components/feedback/sonner.js +1 -0
  123. package/dist/components/general/button.d.ts +20 -0
  124. package/dist/components/general/button.js +2 -0
  125. package/dist/components/general/index.d.ts +6 -0
  126. package/dist/components/general/index.js +2 -0
  127. package/dist/components/layout/index.d.ts +71 -0
  128. package/dist/components/layout/index.js +5 -0
  129. package/dist/components/navigation/dropdown-menu.d.ts +28 -0
  130. package/dist/components/navigation/dropdown-menu.js +2 -0
  131. package/dist/components/navigation/index.d.ts +32 -0
  132. package/dist/components/navigation/index.js +12 -0
  133. package/dist/components/navigation/pagination.d.ts +11 -0
  134. package/dist/components/navigation/pagination.js +7 -0
  135. package/dist/components/navigation/steps.d.ts +12 -0
  136. package/dist/components/navigation/steps.js +3 -0
  137. package/dist/components/navigation/tabs-items.d.ts +12 -0
  138. package/dist/components/navigation/tabs-items.js +3 -0
  139. package/dist/components/navigation/tabs.d.ts +12 -0
  140. package/dist/components/navigation/tabs.js +2 -0
  141. package/dist/components/query/index.d.ts +43 -0
  142. package/dist/components/query/index.js +8 -0
  143. package/dist/components/ui/index.d.ts +57 -0
  144. package/dist/components/ui/index.js +37 -0
  145. package/dist/content.prop-D1Dd3TAc.d.ts +31 -0
  146. package/dist/data-display.prop-DNTAzmDy.d.ts +58 -0
  147. package/dist/data-entry.prop-BEGA1lTq.d.ts +323 -0
  148. package/dist/data-table-D1u_rKLK.d.ts +83 -0
  149. package/dist/data.prop-BVvfKC_g.d.ts +41 -0
  150. package/dist/feedback.prop-BmxUlpAW.d.ts +64 -0
  151. package/dist/filter-bar-B7OGFO9S.d.ts +10 -0
  152. package/dist/form/index.d.ts +21 -0
  153. package/dist/form/index.js +4 -0
  154. package/dist/form.prop-BHgpuFFm.d.ts +41 -0
  155. package/dist/format-date-ByyZoqI5.d.ts +51 -0
  156. package/dist/general.prop-D7brMPNL.d.ts +16 -0
  157. package/dist/i18n/index.d.ts +217 -0
  158. package/dist/i18n/index.js +2 -0
  159. package/dist/index.d.ts +46 -26
  160. package/dist/index.js +39 -13062
  161. package/dist/inline-C5u6ptJV.d.ts +10 -0
  162. package/dist/interaction.prop-Cdn7wOtq.d.ts +25 -0
  163. package/dist/layout.prop-4TCNvyQZ.d.ts +20 -0
  164. package/dist/layout.prop-C795F0qg.d.ts +112 -0
  165. package/dist/lib/datetime/index.d.ts +31 -0
  166. package/dist/lib/datetime/index.js +1 -0
  167. package/dist/lib/utils.d.ts +5 -0
  168. package/dist/lib/utils.js +1 -0
  169. package/dist/navigation.prop-DpZqcXey.d.ts +78 -0
  170. package/dist/navigation.prop-DxBiClEH.d.ts +20 -0
  171. package/dist/props/components/index.d.ts +27 -0
  172. package/dist/props/components/index.js +1 -0
  173. package/dist/props/index.d.ts +28 -0
  174. package/dist/props/index.js +3 -0
  175. package/dist/props/registry.d.ts +649 -0
  176. package/dist/props/registry.js +1 -0
  177. package/dist/props/vocabulary/index.d.ts +7 -0
  178. package/dist/props/vocabulary/index.js +1 -0
  179. package/dist/query.prop-hIPrk2zI.d.ts +71 -0
  180. package/dist/search-input-uP01rY1L.d.ts +22 -0
  181. package/dist/shared.prop-BNRJc9K0.d.ts +45 -0
  182. package/dist/styles/alert-layout.css +191 -0
  183. package/dist/styles/badge-layout.css +22 -0
  184. package/dist/styles/card-layout.css +373 -0
  185. package/dist/styles/control.css +504 -0
  186. package/dist/styles/data-display-layout.css +246 -0
  187. package/dist/styles/density.css +43 -0
  188. package/dist/styles/dialog-layout.css +84 -0
  189. package/dist/styles/index.css +105 -0
  190. package/dist/styles/layout.css +479 -0
  191. package/dist/styles/shell-layout.css +604 -0
  192. package/dist/styles/table-layout.css +109 -0
  193. package/dist/theme/example.service.css +37 -0
  194. package/dist/tokens/base.css +13 -0
  195. package/dist/tokens/foundation.css +151 -0
  196. package/dist/tokens/primitives/badge.css +13 -0
  197. package/dist/tokens/primitives/card.css +29 -0
  198. package/dist/tokens/primitives/control.css +55 -0
  199. package/dist/tokens/primitives/feedback.css +17 -0
  200. package/dist/tokens/primitives/layout.css +20 -0
  201. package/dist/tokens/primitives/navigation.css +13 -0
  202. package/dist/tokens/primitives/table.css +10 -0
  203. package/dist/types-mvzYGrma.d.ts +37 -0
  204. package/dist/use-toast-Dol5bdY3.d.ts +34 -0
  205. package/package.json +279 -117
  206. package/scripts/ui-audit.mjs +179 -0
  207. package/BRAND.md +0 -296
  208. package/CHANGELOG.md +0 -668
  209. package/config/eslint.js +0 -54
  210. package/config/prettier.cjs +0 -20
  211. package/config/tsconfig.base.json +0 -22
  212. package/config/vitest.base.ts +0 -26
  213. package/dist/MiniMonth-YAmPGEpC.d.ts +0 -143
  214. package/dist/Table.types-BbsxoIYE.d.ts +0 -352
  215. package/dist/color-DO0qqUAb.d.ts +0 -38
  216. package/dist/components/composites.d.ts +0 -963
  217. package/dist/components/composites.js +0 -7343
  218. package/dist/components/composites.js.map +0 -1
  219. package/dist/components/primitives.d.ts +0 -2744
  220. package/dist/components/primitives.js +0 -7356
  221. package/dist/components/primitives.js.map +0 -1
  222. package/dist/components/shell.d.ts +0 -182
  223. package/dist/components/shell.js +0 -774
  224. package/dist/components/shell.js.map +0 -1
  225. package/dist/hooks.d.ts +0 -100
  226. package/dist/hooks.js +0 -558
  227. package/dist/hooks.js.map +0 -1
  228. package/dist/i18n.d.ts +0 -61
  229. package/dist/i18n.js +0 -860
  230. package/dist/i18n.js.map +0 -1
  231. package/dist/index.js.map +0 -1
  232. package/dist/padding-DY0JV5Ja.d.ts +0 -16
  233. package/dist/preferences.d.ts +0 -132
  234. package/dist/preferences.js +0 -262
  235. package/dist/preferences.js.map +0 -1
  236. package/dist/props.d.ts +0 -86
  237. package/dist/props.js +0 -16
  238. package/dist/props.js.map +0 -1
  239. package/dist/size-CQwNvOWd.d.ts +0 -19
  240. package/dist/types-LTj-2bl-.d.ts +0 -30
  241. package/dist/useTableViews-D5NIAJ7h.d.ts +0 -154
  242. package/src/tokens/tailwind.css +0 -158
@@ -0,0 +1,71 @@
1
+ import * as React from 'react';
2
+ import { UseQueryResult, UseInfiniteQueryResult, InfiniteData, UseMutationResult, QueryKey } from '@tanstack/react-query';
3
+ import { LinkProps } from 'react-router-dom';
4
+ import { B as ButtonProp } from './general.prop-D7brMPNL.js';
5
+ import { H as HandlerProp, a as ClassNameProp } from './shared.prop-BNRJc9K0.js';
6
+
7
+ /** Query / async lifecycle helpers — @see docs/COMPONENTS.md#query */
8
+
9
+ /** @see DataState — TanStack Query lifecycle widget (not a visual component). */
10
+ type DataStateProp<T> = {
11
+ query: UseQueryResult<T>;
12
+ skeleton: React.ReactNode;
13
+ empty?: React.ReactNode;
14
+ isEmpty?: (data: NonNullable<T>) => boolean;
15
+ errorRenderer?: (error: unknown, retry: () => void) => React.ReactNode;
16
+ /** Default error UI retry button. Default `true`. */
17
+ showRetry?: boolean;
18
+ /** Default `() => query.refetch()`. */
19
+ onRetry?: HandlerProp;
20
+ children: (data: NonNullable<T>) => React.ReactNode;
21
+ };
22
+ type MutationLike = Pick<UseMutationResult<unknown, unknown, unknown, unknown>, "isError" | "error" | "isPending">;
23
+ /** @see MutationFeedback — inline mutation error (form submit, simulator run). */
24
+ type MutationFeedbackProp = {
25
+ mutation: MutationLike;
26
+ onRetry?: HandlerProp;
27
+ showRetry?: boolean;
28
+ /** Optional inline pending slot while `mutation.isPending`. */
29
+ pending?: React.ReactNode;
30
+ className?: ClassNameProp;
31
+ };
32
+ type QueryRefetchLike = Pick<UseQueryResult<unknown>, "isFetching" | "refetch">;
33
+ /** @see QueryRefetchButton — header Refresh wired to `query.refetch()`. */
34
+ type QueryRefetchButtonProp = Omit<ButtonProp, "onClick" | "disabled"> & {
35
+ query: QueryRefetchLike;
36
+ label?: React.ReactNode;
37
+ };
38
+ type InfiniteQueryLike<TPage> = Pick<UseInfiniteQueryResult<InfiniteData<TPage>, unknown>, "isPending" | "isError" | "isFetching" | "isFetchingNextPage" | "error" | "data" | "hasNextPage" | "fetchNextPage" | "refetch">;
39
+ type InfiniteQueryHelpers = {
40
+ fetchNextPage: () => void;
41
+ hasNextPage: boolean;
42
+ isFetchingNextPage: boolean;
43
+ };
44
+ /** @see InfiniteQueryState — useInfiniteQuery lifecycle + load more. */
45
+ type InfiniteQueryStateProp<TPage, TFlat> = {
46
+ query: InfiniteQueryLike<TPage>;
47
+ skeleton: React.ReactNode;
48
+ empty?: React.ReactNode;
49
+ flatten: (data: {
50
+ pages: TPage[];
51
+ }) => TFlat;
52
+ isEmpty?: (flat: TFlat) => boolean;
53
+ errorRenderer?: (error: unknown, retry: () => void) => React.ReactNode;
54
+ showRetry?: boolean;
55
+ onRetry?: HandlerProp;
56
+ loadingMore?: React.ReactNode;
57
+ /** Custom load-more footer; `false` hides footer entirely. */
58
+ loadMore?: React.ReactNode | false;
59
+ /** Show default load-more button when `hasNextPage`. Default `true`. */
60
+ showLoadMore?: boolean;
61
+ children: (flat: TFlat, helpers: InfiniteQueryHelpers) => React.ReactNode;
62
+ };
63
+ /** @see PrefetchLink — Link + prefetchQuery on hover/focus. */
64
+ type PrefetchLinkProp = LinkProps & {
65
+ queryKey: QueryKey;
66
+ queryFn: () => Promise<unknown>;
67
+ prefetchOn?: "hover" | "focus" | "both" | "none";
68
+ staleTime?: number;
69
+ };
70
+
71
+ export type { DataStateProp as D, InfiniteQueryHelpers as I, MutationFeedbackProp as M, PrefetchLinkProp as P, QueryRefetchButtonProp as Q, InfiniteQueryStateProp as a };
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { F as FormFieldProp } from './data-entry.prop-BEGA1lTq.js';
3
+ import * as React from 'react';
4
+
5
+ declare function FormField({ id, label, required, helper, error, labelAddon, className, children, }: FormFieldProp): react_jsx_runtime.JSX.Element;
6
+
7
+ interface SearchInputProps {
8
+ value?: string;
9
+ defaultValue?: string;
10
+ placeholder?: string;
11
+ debounce?: number;
12
+ onSearch: (q: string) => void;
13
+ label?: React.ReactNode;
14
+ ariaLabel?: string;
15
+ className?: string;
16
+ inputClassName?: string;
17
+ id?: string;
18
+ disabled?: boolean;
19
+ }
20
+ declare function SearchInput({ value: controlledValue, defaultValue, placeholder, debounce, onSearch, label, ariaLabel, className, inputClassName, id, disabled, }: SearchInputProps): react_jsx_runtime.JSX.Element;
21
+
22
+ export { FormField as F, SearchInput as S };
@@ -0,0 +1,45 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * Shared atomic prop types used across multiple components.
5
+ * @see docs/PROPS-VOCABULARY.md
6
+ */
7
+
8
+ /** Extra CSS class names on a component root. */
9
+ type ClassNameProp = string;
10
+ /** Child nodes slot. */
11
+ type ChildrenProp = React.ReactNode;
12
+ /** Stable DOM / form identifier. */
13
+ type IdProp = string;
14
+ /** Controlled open state for panels (Dialog, Sheet, Popover). */
15
+ type OpenProp = boolean;
16
+ /** Callback when open state changes. */
17
+ type OnOpenChangeProp = (open: boolean) => void;
18
+ /** Async or sync handler — no return value expected. */
19
+ type HandlerProp = () => void | Promise<void>;
20
+ /** Loading / pending state — disables actions and shows spinners. */
21
+ type PendingProp = boolean;
22
+ /** Field or control is required. */
23
+ type RequiredProp = boolean;
24
+ /** Disable user interaction. */
25
+ type DisabledProp = boolean;
26
+ /** Generic label text (filters, form fields, nav groups). */
27
+ type LabelProp = React.ReactNode;
28
+ /** Helper / hint text below inputs. */
29
+ type HelperProp = React.ReactNode;
30
+ /** Validation error message. */
31
+ type ErrorProp = React.ReactNode;
32
+ /** Placeholder text for inputs. */
33
+ type PlaceholderProp = string;
34
+ /** HTML input `name` attribute. */
35
+ type NameProp = string;
36
+ /** HTML input `value` — string form. */
37
+ type ValueProp = string;
38
+ /** Change handler for text inputs. */
39
+ type OnChangeProp = React.ChangeEventHandler<HTMLInputElement>;
40
+ /** Click handler for buttons and interactive elements. */
41
+ type OnClickProp = React.MouseEventHandler<HTMLButtonElement>;
42
+ /** Radix/shadcn `asChild` polymorphism — render as child element. */
43
+ type AsChildProp = boolean;
44
+
45
+ export type { AsChildProp as A, ChildrenProp as C, DisabledProp as D, ErrorProp as E, HandlerProp as H, IdProp as I, LabelProp as L, NameProp as N, OnChangeProp as O, PendingProp as P, RequiredProp as R, ValueProp as V, ClassNameProp as a, HelperProp as b, OnClickProp as c, OnOpenChangeProp as d, OpenProp as e, PlaceholderProp as f };
@@ -0,0 +1,191 @@
1
+ /*
2
+ * ALERT — inset, gaps, dismiss offset; colors via data-variant + semantic tokens.
3
+ */
4
+
5
+ @layer components {
6
+ [data-slot="alert"] {
7
+ position: relative;
8
+ display: flex;
9
+ align-items: flex-start;
10
+ gap: var(--space-alert-gap);
11
+ width: 100%;
12
+ border-radius: var(--radius-md);
13
+ border-width: 1px;
14
+ padding: var(--space-alert-inset);
15
+ font-size: var(--font-size-sm);
16
+ }
17
+
18
+ [data-slot="alert"][data-variant="default"] {
19
+ border-color: hsl(var(--border));
20
+ background-color: hsl(var(--muted) / 0.4);
21
+ color: hsl(var(--foreground));
22
+ }
23
+
24
+ [data-slot="alert"][data-variant="destructive"] {
25
+ border-color: hsl(var(--destructive) / 0.3);
26
+ background-color: hsl(var(--destructive) / 0.05);
27
+ color: hsl(var(--foreground));
28
+ }
29
+
30
+ [data-slot="alert"][data-variant="warning"] {
31
+ border-color: hsl(var(--warning) / 0.3);
32
+ background-color: hsl(var(--warning) / 0.05);
33
+ color: hsl(var(--foreground));
34
+ }
35
+
36
+ [data-slot="alert"][data-variant="success"] {
37
+ border-color: hsl(var(--success) / 0.3);
38
+ background-color: hsl(var(--success) / 0.05);
39
+ color: hsl(var(--foreground));
40
+ }
41
+
42
+ [data-slot="alert"][data-dismissible] {
43
+ padding-right: calc(var(--space-alert-inset) + var(--space-8));
44
+ }
45
+
46
+ [data-slot="alert-icon"] {
47
+ width: 1.25rem;
48
+ height: 1.25rem;
49
+ flex-shrink: 0;
50
+ margin-top: 0.125rem;
51
+ }
52
+
53
+ [data-slot="alert-icon"][data-variant="default"] {
54
+ color: hsl(var(--foreground));
55
+ }
56
+
57
+ [data-slot="alert-icon"][data-variant="destructive"] {
58
+ color: hsl(var(--destructive));
59
+ }
60
+
61
+ [data-slot="alert-icon"][data-variant="warning"] {
62
+ color: hsl(var(--warning));
63
+ }
64
+
65
+ [data-slot="alert-icon"][data-variant="success"] {
66
+ color: hsl(var(--success));
67
+ }
68
+
69
+ [data-slot="alert-body"] {
70
+ display: flex;
71
+ flex: 1;
72
+ min-width: 0;
73
+ flex-direction: column;
74
+ gap: var(--space-alert-inner-gap);
75
+ }
76
+
77
+ @media (min-width: 640px) {
78
+ [data-slot="alert-body"] {
79
+ flex-direction: row;
80
+ align-items: flex-start;
81
+ justify-content: space-between;
82
+ }
83
+ }
84
+
85
+ [data-slot="alert-title"] {
86
+ font-size: var(--font-size-sm);
87
+ font-weight: var(--font-weight-medium);
88
+ line-height: 1;
89
+ }
90
+
91
+ [data-slot="alert-title"][data-variant="destructive"] {
92
+ color: hsl(var(--destructive));
93
+ }
94
+
95
+ [data-slot="alert-title"][data-variant="warning"] {
96
+ color: hsl(var(--warning));
97
+ }
98
+
99
+ [data-slot="alert-title"][data-variant="success"] {
100
+ color: hsl(var(--success));
101
+ }
102
+
103
+ [data-slot="alert-description"] {
104
+ margin-top: var(--space-1);
105
+ font-size: var(--font-size-sm);
106
+ color: hsl(var(--muted-foreground));
107
+ overflow-wrap: break-word;
108
+ }
109
+
110
+ [data-slot="alert-actions"] {
111
+ display: flex;
112
+ flex-shrink: 0;
113
+ flex-wrap: wrap;
114
+ gap: var(--space-inline-sm);
115
+ width: 100%;
116
+ }
117
+
118
+ @media (min-width: 640px) {
119
+ [data-slot="alert-actions"] {
120
+ width: auto;
121
+ justify-content: flex-end;
122
+ }
123
+ }
124
+
125
+ [data-slot="alert-dismiss"] {
126
+ position: absolute;
127
+ top: var(--space-alert-dismiss-offset);
128
+ right: var(--space-alert-dismiss-offset);
129
+ border-radius: var(--radius-sm);
130
+ opacity: 0.7;
131
+ }
132
+
133
+ .ui-skeleton-block {
134
+ border-radius: var(--skeleton-radius);
135
+ background: hsl(var(--muted));
136
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
137
+ }
138
+
139
+ .ui-skeleton-rows,
140
+ .ui-skeleton-detail-stack,
141
+ .ui-skeleton-card {
142
+ display: grid;
143
+ gap: var(--skeleton-row-gap);
144
+ }
145
+
146
+ .ui-skeleton-row,
147
+ .ui-skeleton-table-row {
148
+ display: flex;
149
+ align-items: center;
150
+ gap: var(--skeleton-cell-gap);
151
+ }
152
+
153
+ .ui-skeleton-table {
154
+ overflow: hidden;
155
+ border: 1px solid hsl(var(--border));
156
+ border-radius: var(--skeleton-radius);
157
+ }
158
+
159
+ .ui-skeleton-table-head {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: var(--skeleton-cell-gap);
163
+ padding-inline: var(--space-3);
164
+ background: hsl(var(--muted) / 0.5);
165
+ }
166
+
167
+ .ui-skeleton-table-body {
168
+ display: grid;
169
+ }
170
+
171
+ .ui-skeleton-table-row + .ui-skeleton-table-row {
172
+ border-top: 1px solid hsl(var(--border));
173
+ }
174
+
175
+ .ui-skeleton-detail {
176
+ max-width: 56rem;
177
+ }
178
+
179
+ .ui-skeleton-detail-box,
180
+ .ui-skeleton-card {
181
+ border: 1px solid hsl(var(--border));
182
+ border-radius: var(--skeleton-radius);
183
+ padding: var(--skeleton-card-inset);
184
+ }
185
+
186
+ @keyframes pulse {
187
+ 50% {
188
+ opacity: 0.5;
189
+ }
190
+ }
191
+ }
@@ -0,0 +1,22 @@
1
+ /*
2
+ * STATUS BADGE — compact chip spacing + semantic tones (control-styles.ts maps tones).
3
+ */
4
+
5
+ @layer components {
6
+ [data-slot="status-badge"] {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ gap: var(--space-badge-gap);
10
+ padding: var(--space-badge-y) var(--space-badge-x);
11
+ border-radius: var(--radius-md);
12
+ border-width: 1px;
13
+ font-size: var(--font-size-xs);
14
+ font-weight: var(--font-weight-medium);
15
+ }
16
+
17
+ [data-slot="status-badge-icon"] {
18
+ width: 0.75rem;
19
+ height: 0.75rem;
20
+ flex-shrink: 0;
21
+ }
22
+ }