@omnitron-dev/prism 0.3.0 → 0.3.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 (214) hide show
  1. package/README.md +148 -0
  2. package/dist/blocks/index.js +3 -1
  3. package/dist/blocks/index.js.map +1 -1
  4. package/dist/{chunk-S6SEGBX6.js → chunk-472SOF76.js} +4 -4
  5. package/dist/{chunk-S6SEGBX6.js.map → chunk-472SOF76.js.map} +1 -1
  6. package/dist/{chunk-Z5OSPAOC.js → chunk-4Z5DE5GK.js} +78 -75
  7. package/dist/chunk-4Z5DE5GK.js.map +1 -0
  8. package/dist/chunk-52PQL67Q.js +559 -0
  9. package/dist/chunk-52PQL67Q.js.map +1 -0
  10. package/dist/chunk-75FQ5IW3.js +590 -0
  11. package/dist/chunk-75FQ5IW3.js.map +1 -0
  12. package/dist/{chunk-6AHI4GSV.js → chunk-7G5D5PTC.js} +4 -3
  13. package/dist/chunk-7G5D5PTC.js.map +1 -0
  14. package/dist/chunk-BJE2AKD4.js +105 -0
  15. package/dist/chunk-BJE2AKD4.js.map +1 -0
  16. package/dist/chunk-FF5RF32O.js +248 -0
  17. package/dist/chunk-FF5RF32O.js.map +1 -0
  18. package/dist/{chunk-OBJ244BO.js → chunk-GMIE6III.js} +9 -42
  19. package/dist/chunk-GMIE6III.js.map +1 -0
  20. package/dist/chunk-GUGTDURV.js +826 -0
  21. package/dist/chunk-GUGTDURV.js.map +1 -0
  22. package/dist/chunk-HOXFSQUV.js +573 -0
  23. package/dist/chunk-HOXFSQUV.js.map +1 -0
  24. package/dist/chunk-JSQTYDPG.js +3 -0
  25. package/dist/chunk-JSQTYDPG.js.map +1 -0
  26. package/dist/{chunk-ZTATTUH7.js → chunk-KQ67XB6T.js} +213 -651
  27. package/dist/chunk-KQ67XB6T.js.map +1 -0
  28. package/dist/{chunk-WFD54GQQ.js → chunk-LOY2NPCO.js} +14 -573
  29. package/dist/chunk-LOY2NPCO.js.map +1 -0
  30. package/dist/{chunk-YQW43BDH.js → chunk-LSPFFEJT.js} +240 -1824
  31. package/dist/chunk-LSPFFEJT.js.map +1 -0
  32. package/dist/{chunk-BZOL7GMU.js → chunk-OKTLA23Q.js} +4 -4
  33. package/dist/chunk-OKTLA23Q.js.map +1 -0
  34. package/dist/chunk-PFT2BNYO.js +191 -0
  35. package/dist/chunk-PFT2BNYO.js.map +1 -0
  36. package/dist/chunk-PGHEP4JD.js +106 -0
  37. package/dist/chunk-PGHEP4JD.js.map +1 -0
  38. package/dist/chunk-PXXPLHIY.js +74 -0
  39. package/dist/chunk-PXXPLHIY.js.map +1 -0
  40. package/dist/chunk-SU3LVQ7N.js +518 -0
  41. package/dist/chunk-SU3LVQ7N.js.map +1 -0
  42. package/dist/chunk-YHE7HXSG.js +206 -0
  43. package/dist/chunk-YHE7HXSG.js.map +1 -0
  44. package/dist/cli/index.js +7 -2
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/components/accordion/accordion.d.ts.map +1 -1
  47. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
  48. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
  49. package/dist/components/date-input/date-input.d.ts +27 -0
  50. package/dist/components/date-input/date-input.d.ts.map +1 -0
  51. package/dist/components/date-input/index.d.ts +4 -0
  52. package/dist/components/date-input/index.d.ts.map +1 -0
  53. package/dist/components/date-input/value.d.ts +9 -0
  54. package/dist/components/date-input/value.d.ts.map +1 -0
  55. package/dist/components/doc-layout/doc-sidebar.d.ts +4 -1
  56. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -1
  57. package/dist/components/doc-layout/index.js +6 -0
  58. package/dist/components/doc-layout/index.js.map +1 -0
  59. package/dist/components/editor/editor.d.ts.map +1 -1
  60. package/dist/components/editor/icons/index.d.ts +32 -40
  61. package/dist/components/editor/icons/index.d.ts.map +1 -1
  62. package/dist/components/editor/index.js +3 -1
  63. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -1
  64. package/dist/components/index.css +4 -0
  65. package/dist/components/index.css.map +1 -1
  66. package/dist/components/index.d.ts +4 -4
  67. package/dist/components/index.d.ts.map +1 -1
  68. package/dist/components/index.js +18 -8
  69. package/dist/components/knowledge-graph/edge-labels.d.ts +14 -0
  70. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -0
  71. package/dist/components/knowledge-graph/graph.d.ts +56 -0
  72. package/dist/components/knowledge-graph/graph.d.ts.map +1 -0
  73. package/dist/components/knowledge-graph/index.css +176 -0
  74. package/dist/components/knowledge-graph/index.css.map +1 -0
  75. package/dist/components/knowledge-graph/index.d.ts +3 -0
  76. package/dist/components/knowledge-graph/index.d.ts.map +1 -0
  77. package/dist/components/knowledge-graph/index.js +795 -0
  78. package/dist/components/knowledge-graph/index.js.map +1 -0
  79. package/dist/components/knowledge-graph/label-layout.d.ts +28 -0
  80. package/dist/components/knowledge-graph/label-layout.d.ts.map +1 -0
  81. package/dist/components/knowledge-graph/label-store.d.ts +15 -0
  82. package/dist/components/knowledge-graph/label-store.d.ts.map +1 -0
  83. package/dist/components/knowledge-graph/model.d.ts +92 -0
  84. package/dist/components/knowledge-graph/model.d.ts.map +1 -0
  85. package/dist/components/lightbox/lightbox.d.ts.map +1 -1
  86. package/dist/components/map/Map.d.ts +19 -43
  87. package/dist/components/map/Map.d.ts.map +1 -1
  88. package/dist/components/map/MapCoverageLayer.d.ts +1 -1
  89. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -1
  90. package/dist/components/map/MapMarker.d.ts +1 -1
  91. package/dist/components/map/MapMarker.d.ts.map +1 -1
  92. package/dist/components/map/MapPlaceSearch.d.ts +33 -0
  93. package/dist/components/map/MapPlaceSearch.d.ts.map +1 -0
  94. package/dist/components/map/MapPointPicker.d.ts +21 -12
  95. package/dist/components/map/MapPointPicker.d.ts.map +1 -1
  96. package/dist/components/map/coordinates.d.ts +10 -0
  97. package/dist/components/map/coordinates.d.ts.map +1 -0
  98. package/dist/components/map/index.css +4 -0
  99. package/dist/components/map/index.css.map +1 -0
  100. package/dist/components/map/index.d.ts +7 -2
  101. package/dist/components/map/index.d.ts.map +1 -1
  102. package/dist/components/map/index.js +3 -0
  103. package/dist/components/map/index.js.map +1 -0
  104. package/dist/components/nav-card/nav-card.d.ts.map +1 -1
  105. package/dist/components/rail/rail.d.ts.map +1 -1
  106. package/dist/components/research/diagram-image.d.ts +11 -0
  107. package/dist/components/research/diagram-image.d.ts.map +1 -0
  108. package/dist/components/research/diagram.d.ts +8 -0
  109. package/dist/components/research/diagram.d.ts.map +1 -0
  110. package/dist/components/research/document.d.ts +33 -0
  111. package/dist/components/research/document.d.ts.map +1 -0
  112. package/dist/components/research/frontmatter.d.ts +15 -0
  113. package/dist/components/research/frontmatter.d.ts.map +1 -0
  114. package/dist/components/research/index.css +51 -0
  115. package/dist/components/research/index.css.map +1 -0
  116. package/dist/components/research/index.d.ts +3 -0
  117. package/dist/components/research/index.d.ts.map +1 -0
  118. package/dist/components/research/index.js +6 -0
  119. package/dist/components/research/index.js.map +1 -0
  120. package/dist/components/research/parse.d.ts +29 -0
  121. package/dist/components/research/parse.d.ts.map +1 -0
  122. package/dist/components/research-editor/block-commands.d.ts +20 -0
  123. package/dist/components/research-editor/block-commands.d.ts.map +1 -0
  124. package/dist/components/research-editor/block-controls.d.ts +13 -0
  125. package/dist/components/research-editor/block-controls.d.ts.map +1 -0
  126. package/dist/components/research-editor/editor.d.ts +75 -0
  127. package/dist/components/research-editor/editor.d.ts.map +1 -0
  128. package/dist/components/research-editor/extensions.d.ts +14 -0
  129. package/dist/components/research-editor/extensions.d.ts.map +1 -0
  130. package/dist/components/research-editor/index.css +332 -0
  131. package/dist/components/research-editor/index.css.map +1 -0
  132. package/dist/components/research-editor/index.d.ts +5 -0
  133. package/dist/components/research-editor/index.d.ts.map +1 -0
  134. package/dist/components/research-editor/index.js +1592 -0
  135. package/dist/components/research-editor/index.js.map +1 -0
  136. package/dist/components/research-editor/math-input.d.ts +32 -0
  137. package/dist/components/research-editor/math-input.d.ts.map +1 -0
  138. package/dist/components/research-editor/math-markup.d.ts +4 -0
  139. package/dist/components/research-editor/math-markup.d.ts.map +1 -0
  140. package/dist/components/research-editor/math-navigation.d.ts +6 -0
  141. package/dist/components/research-editor/math-navigation.d.ts.map +1 -0
  142. package/dist/components/research-editor/math-node.d.ts +11 -0
  143. package/dist/components/research-editor/math-node.d.ts.map +1 -0
  144. package/dist/components/research-editor/source.d.ts +19 -0
  145. package/dist/components/research-editor/source.d.ts.map +1 -0
  146. package/dist/components/scrollbar/scrollbar.d.ts +4 -2
  147. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
  148. package/dist/components/search-input/search-input.d.ts +0 -10
  149. package/dist/components/search-input/search-input.d.ts.map +1 -1
  150. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +4 -3
  151. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -1
  152. package/dist/core/index.d.ts +1 -1
  153. package/dist/core/index.d.ts.map +1 -1
  154. package/dist/core/index.js +8 -4
  155. package/dist/core/provider.d.ts +7 -2
  156. package/dist/core/provider.d.ts.map +1 -1
  157. package/dist/forms/schema-provider.d.ts +3 -3
  158. package/dist/forms/schema-utils.d.ts +3 -3
  159. package/dist/hooks/index.js +9 -5
  160. package/dist/icons/context.d.ts +17 -0
  161. package/dist/icons/context.d.ts.map +1 -0
  162. package/dist/icons/controls.d.ts +51 -0
  163. package/dist/icons/controls.d.ts.map +1 -0
  164. package/dist/icons/index.d.ts +3 -0
  165. package/dist/icons/index.d.ts.map +1 -0
  166. package/dist/icons/index.js +4 -0
  167. package/dist/icons/index.js.map +1 -0
  168. package/dist/icons/theme.d.ts +4 -0
  169. package/dist/icons/theme.d.ts.map +1 -0
  170. package/dist/index.css +4 -0
  171. package/dist/index.css.map +1 -1
  172. package/dist/index.js +24 -13
  173. package/dist/index.js.map +1 -1
  174. package/dist/layouts/core/header-section.d.ts.map +1 -1
  175. package/dist/layouts/dashboard/labels.d.ts +12 -0
  176. package/dist/layouts/dashboard/labels.d.ts.map +1 -0
  177. package/dist/layouts/dashboard/layout.d.ts +7 -1
  178. package/dist/layouts/dashboard/layout.d.ts.map +1 -1
  179. package/dist/layouts/dashboard/sidenav.d.ts +7 -3
  180. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
  181. package/dist/layouts/index.d.ts +5 -0
  182. package/dist/layouts/index.d.ts.map +1 -1
  183. package/dist/layouts/index.js +6 -1
  184. package/dist/layouts/panel-layout.d.ts +35 -0
  185. package/dist/layouts/panel-layout.d.ts.map +1 -0
  186. package/dist/layouts/sidebar-toggle.d.ts +11 -0
  187. package/dist/layouts/sidebar-toggle.d.ts.map +1 -0
  188. package/dist/state/stores/auth.d.ts +4 -16
  189. package/dist/state/stores/auth.d.ts.map +1 -1
  190. package/dist/state/stores/ui.d.ts +7 -105
  191. package/dist/state/stores/ui.d.ts.map +1 -1
  192. package/dist/theme/components/Button.d.ts.map +1 -1
  193. package/dist/theme/components/FormControls.d.ts +3 -12
  194. package/dist/theme/components/FormControls.d.ts.map +1 -1
  195. package/dist/theme/components/index.d.ts.map +1 -1
  196. package/dist/theme/create-theme.d.ts +5 -17
  197. package/dist/theme/create-theme.d.ts.map +1 -1
  198. package/dist/theme/index.js +6 -2
  199. package/dist/theme/mixins.d.ts +3 -1
  200. package/dist/theme/mixins.d.ts.map +1 -1
  201. package/dist/theme/palette/overrides.d.ts +23 -0
  202. package/dist/theme/palette/overrides.d.ts.map +1 -0
  203. package/dist/ui/index.d.ts +18 -0
  204. package/dist/ui/index.d.ts.map +1 -0
  205. package/dist/ui/index.js +148 -0
  206. package/dist/ui/index.js.map +1 -0
  207. package/package.json +92 -45
  208. package/dist/chunk-6AHI4GSV.js.map +0 -1
  209. package/dist/chunk-BZOL7GMU.js.map +0 -1
  210. package/dist/chunk-OBJ244BO.js.map +0 -1
  211. package/dist/chunk-WFD54GQQ.js.map +0 -1
  212. package/dist/chunk-YQW43BDH.js.map +0 -1
  213. package/dist/chunk-Z5OSPAOC.js.map +0 -1
  214. package/dist/chunk-ZTATTUH7.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Theme-native composition primitives. These are the original MUI components,
3
+ * with their complete types, keyboard behavior and slot APIs, under Prism's
4
+ * supported package surface. No duplicate state, styling engine or wrappers.
5
+ * Use createPrismTheme / PrismThemeProvider when composing a small application;
6
+ * use PrismProvider for the full settings/localization stack.
7
+ */
8
+ export { Alert, Accordion, AccordionSummary, AccordionDetails, Box, Button, Card, CardActionArea, CardContent, Chip, CircularProgress, Divider, Drawer, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, FormControl, FormControlLabel, FormLabel, FormHelperText, IconButton, InputAdornment, InputLabel, LinearProgress, Link, List, ListItem, ListItemIcon, ListItemButton, ListItemText, Menu, MenuItem, Radio, RadioGroup, Select, Skeleton, Slider, Stack, Switch, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Tab, Tabs, TextField, Tooltip, Typography, } from '@mui/material';
9
+ export type { ButtonProps, TextFieldProps, SliderProps, SxProps, Theme } from '@mui/material';
10
+ export { ThemeProvider as PrismThemeProvider, useTheme } from '@mui/material/styles';
11
+ export { default as useMediaQuery } from '@mui/material/useMediaQuery';
12
+ export { default as Breadcrumbs } from '@mui/material/Breadcrumbs';
13
+ export { default as SvgIcon } from '@mui/material/SvgIcon';
14
+ export type { SvgIconProps } from '@mui/material/SvgIcon';
15
+ export { PrismIconProvider, prismIconNames, type PrismIconSet, type PrismIconName, type PrismIconComponent, } from '../icons/context.js';
16
+ export { Scrollbar, type ScrollbarProps } from '../components/scrollbar/index.js';
17
+ export { PrismDatePicker, PrismTimePicker, PrismDateTimePicker, datePickerRuRU, datePickerEnUS, type PrismCalendarInputProps, } from '../components/date-input/index.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,GAAG,EACH,MAAM,EACN,IAAI,EACJ,cAAc,EACd,WAAW,EACX,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,UAAU,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,EACd,SAAS,EACT,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,SAAS,EACT,OAAO,EACP,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElF,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,KAAK,uBAAuB,GAC7B,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,148 @@
1
+ import '../chunk-JSQTYDPG.js';
2
+ export { Scrollbar } from '../chunk-PXXPLHIY.js';
3
+ import '../chunk-HOXFSQUV.js';
4
+ export { PrismIconProvider, prismIconNames } from '../chunk-BJE2AKD4.js';
5
+ export { Accordion, AccordionDetails, AccordionSummary, Alert, Box, Button, Card, CardActionArea, CardContent, Chip, CircularProgress, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Divider, Drawer, FormControl, FormControlLabel, FormHelperText, FormLabel, IconButton, InputAdornment, InputLabel, LinearProgress, Link, List, ListItem, ListItemButton, ListItemIcon, ListItemText, Menu, MenuItem, Radio, RadioGroup, Select, Skeleton, Slider, Stack, Switch, Tab, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Tabs, TextField, Tooltip, Typography } from '@mui/material';
6
+ export { ThemeProvider as PrismThemeProvider, useTheme } from '@mui/material/styles';
7
+ export { default as useMediaQuery } from '@mui/material/useMediaQuery';
8
+ export { default as Breadcrumbs } from '@mui/material/Breadcrumbs';
9
+ export { default as SvgIcon } from '@mui/material/SvgIcon';
10
+ import 'dayjs/locale/ru.js';
11
+ import { useState, useCallback, useRef, useEffect } from 'react';
12
+ import { DatePicker } from '@mui/x-date-pickers/DatePicker';
13
+ import { TimePicker } from '@mui/x-date-pickers/TimePicker';
14
+ import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
15
+ import dayjs from 'dayjs';
16
+ import utc from 'dayjs/plugin/utc.js';
17
+ import { jsx } from 'react/jsx-runtime';
18
+ export { enUS as datePickerEnUS, ruRU as datePickerRuRU } from '@mui/x-date-pickers/locales';
19
+
20
+ dayjs.extend(utc);
21
+ function calendarFormat(kind, precision = "minute") {
22
+ const time = precision === "second" ? "HH:mm:ss" : "HH:mm";
23
+ return kind === "date" ? "YYYY-MM-DD" : kind === "time" ? time : `YYYY-MM-DD[T]${time}`;
24
+ }
25
+ function parseCalendarValue(value, kind) {
26
+ if (value === "") return null;
27
+ const source = kind === "time" ? `2000-01-01T${value}` : value;
28
+ const pattern = kind === "date" ? /^(\d{4})-(\d{2})-(\d{2})$/ : /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?$/;
29
+ const match = pattern.exec(source);
30
+ if (!match) return dayjs.utc(NaN);
31
+ const [, y, m, d, h = "0", minute = "0", sec = "0"] = match;
32
+ const date = /* @__PURE__ */ new Date(0);
33
+ date.setUTCFullYear(Number(y), Number(m) - 1, Number(d));
34
+ date.setUTCHours(Number(h), Number(minute), Number(sec), 0);
35
+ const second = /:\d{2}:\d{2}$/.test(value);
36
+ const format = calendarFormat(kind, second ? "second" : "minute");
37
+ const parsed = dayjs.utc(date);
38
+ return parsed.isValid() && parsed.format(format) === value ? parsed : dayjs.utc(NaN);
39
+ }
40
+ function formatCalendarValue(value, kind, precision) {
41
+ return value?.isValid() ? value.format(calendarFormat(kind, precision)) : "";
42
+ }
43
+ function CalendarInput({
44
+ kind,
45
+ value,
46
+ onChange,
47
+ label,
48
+ invalidText,
49
+ helperText,
50
+ name,
51
+ required,
52
+ disabled,
53
+ readOnly,
54
+ size = "medium",
55
+ fullWidth = true,
56
+ min,
57
+ max,
58
+ precision = "minute",
59
+ onValidityChange,
60
+ sx
61
+ }) {
62
+ const [draft, setDraft] = useState(() => parseCalendarValue(value, kind));
63
+ const [invalid, setInvalid] = useState(false);
64
+ const [partial, setPartial] = useState(false);
65
+ const captureField = useCallback((field) => {
66
+ if (!field) return;
67
+ const sections = field.getSections();
68
+ setPartial(sections.some((section) => section.value !== "") && sections.some((section) => section.value === ""));
69
+ }, []);
70
+ const invalidDraft = invalid || partial;
71
+ const published = useRef(value);
72
+ const input = useRef(null);
73
+ useEffect(() => {
74
+ if (published.current !== value) {
75
+ published.current = value;
76
+ setDraft(parseCalendarValue(value, kind));
77
+ }
78
+ }, [value, kind]);
79
+ useEffect(() => {
80
+ input.current?.setCustomValidity(invalidDraft ? invalidText : "");
81
+ onValidityChange?.(!invalidDraft && (!required || draft !== null));
82
+ }, [invalidDraft, invalidText, onValidityChange, required, draft]);
83
+ const onValue = (next, context) => {
84
+ const failed = context.validationError != null || next !== null && !next.isValid();
85
+ setDraft(next);
86
+ setInvalid(failed);
87
+ const text = failed ? "" : formatCalendarValue(next, kind, precision);
88
+ published.current = text;
89
+ onChange(text);
90
+ };
91
+ const props = {
92
+ label,
93
+ value: draft,
94
+ timezone: "UTC",
95
+ onChange: onValue,
96
+ onError: (error) => setInvalid(error != null),
97
+ inputRef: input,
98
+ disabled,
99
+ readOnly,
100
+ sx,
101
+ slotProps: {
102
+ textField: {
103
+ name,
104
+ required,
105
+ size,
106
+ fullWidth,
107
+ error: invalidDraft,
108
+ helperText: invalidDraft ? invalidText : helperText
109
+ },
110
+ field: { clearable: true, fieldRef: captureField },
111
+ popper: {
112
+ modifiers: [
113
+ { name: "flip", options: { rootBoundary: "viewport", padding: 8 } },
114
+ {
115
+ name: "preventOverflow",
116
+ // For a top/bottom placement the alternate axis is vertical. A
117
+ // calendar may fit the viewport but neither side of its anchor;
118
+ // permit overlap with the anchor rather than hiding its actions.
119
+ options: { rootBoundary: "viewport", padding: 8, mainAxis: true, altAxis: true, tether: false }
120
+ }
121
+ ]
122
+ },
123
+ desktopPaper: {
124
+ sx: { maxHeight: "calc(100dvh - 16px)", maxWidth: "calc(100vw - 16px)", overflow: "auto" }
125
+ },
126
+ actionBar: { actions: ["clear", "cancel", "accept"] }
127
+ }
128
+ };
129
+ const lower = min ? parseCalendarValue(min, kind) ?? void 0 : void 0;
130
+ const upper = max ? parseCalendarValue(max, kind) ?? void 0 : void 0;
131
+ if (kind === "date") return /* @__PURE__ */ jsx(DatePicker, { ...props, minDate: lower, maxDate: upper });
132
+ const views = precision === "second" ? ["hours", "minutes", "seconds"] : ["hours", "minutes"];
133
+ if (kind === "time") return /* @__PURE__ */ jsx(TimePicker, { ...props, ampm: false, views: [...views], minTime: lower, maxTime: upper });
134
+ return /* @__PURE__ */ jsx(DateTimePicker, { ...props, ampm: false, views: ["year", "day", ...views], minDateTime: lower, maxDateTime: upper });
135
+ }
136
+ function PrismDatePicker(props) {
137
+ return /* @__PURE__ */ jsx(CalendarInput, { ...props, kind: "date" });
138
+ }
139
+ function PrismTimePicker(props) {
140
+ return /* @__PURE__ */ jsx(CalendarInput, { ...props, kind: "time" });
141
+ }
142
+ function PrismDateTimePicker(props) {
143
+ return /* @__PURE__ */ jsx(CalendarInput, { ...props, kind: "datetime" });
144
+ }
145
+
146
+ export { PrismDatePicker, PrismDateTimePicker, PrismTimePicker };
147
+ //# sourceMappingURL=index.js.map
148
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/date-input/value.ts","../../src/components/date-input/date-input.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import dayjs, { type Dayjs } from 'dayjs';\nimport utc from 'dayjs/plugin/utc.js';\ndayjs.extend(utc);\nexport type CalendarValueKind = 'date' | 'time' | 'datetime';\nexport type CalendarPrecision = 'minute' | 'second';\nexport function calendarFormat(kind: CalendarValueKind, precision: CalendarPrecision = 'minute') {\n const time = precision === 'second' ? 'HH:mm:ss' : 'HH:mm';\n return kind === 'date' ? 'YYYY-MM-DD' : kind === 'time' ? time : `YYYY-MM-DD[T]${time}`;\n}\n/** A calendar/wall-clock value has no time zone. UTC is only the picker's carrier;\n * it must never be serialized as an instant or converted to the device zone. */\nexport function parseCalendarValue(value: string, kind: CalendarValueKind): Dayjs | null {\n if (value === '') return null;\n const source = kind === 'time' ? `2000-01-01T${value}` : value;\n const pattern =\n kind === 'date' ? /^(\\d{4})-(\\d{2})-(\\d{2})$/ : /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n const match = pattern.exec(source);\n if (!match) return dayjs.utc(NaN);\n const [, y, m, d, h = '0', minute = '0', sec = '0'] = match;\n const date = new Date(0);\n date.setUTCFullYear(Number(y), Number(m) - 1, Number(d));\n date.setUTCHours(Number(h), Number(minute), Number(sec), 0);\n const second = /:\\d{2}:\\d{2}$/.test(value);\n const format = calendarFormat(kind, second ? 'second' : 'minute');\n const parsed = dayjs.utc(date);\n return parsed.isValid() && parsed.format(format) === value ? parsed : dayjs.utc(NaN);\n}\nexport function formatCalendarValue(\n value: Dayjs | null,\n kind: CalendarValueKind,\n precision: CalendarPrecision\n): string {\n return value?.isValid() ? value.format(calendarFormat(kind, precision)) : '';\n}\n","import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\nimport type { Dayjs } from 'dayjs';\nimport type { FieldRef } from '@mui/x-date-pickers/models';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { formatCalendarValue, parseCalendarValue, type CalendarValueKind, type CalendarPrecision } from './value.js';\nexport interface PrismCalendarInputProps {\n /** Calendar date, wall time, or local date-time; empty string means cleared. */\n value: string;\n onChange: (value: string) => void;\n label: ReactNode;\n /** Localized text for a partial, invalid, or out-of-range value. */\n invalidText: string;\n helperText?: ReactNode;\n name?: string;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n size?: 'small' | 'medium';\n fullWidth?: boolean;\n min?: string;\n max?: string;\n precision?: CalendarPrecision;\n onValidityChange?: (valid: boolean) => void;\n sx?: SxProps<Theme>;\n}\n/** MUI's segmented keyboard editing/calendar/clock, with an explicit wall-value\n * contract. Invalid drafts remain visible but cannot submit a previous value. */\nfunction CalendarInput({\n kind,\n value,\n onChange,\n label,\n invalidText,\n helperText,\n name,\n required,\n disabled,\n readOnly,\n size = 'medium',\n fullWidth = true,\n min,\n max,\n precision = 'minute',\n onValidityChange,\n sx,\n}: PrismCalendarInputProps & { kind: CalendarValueKind }) {\n const [draft, setDraft] = useState(() => parseCalendarValue(value, kind));\n const [invalid, setInvalid] = useState(false);\n const [partial, setPartial] = useState(false);\n // MUI intentionally publishes null when one segment is deleted, while retaining\n // the other sections. Its public field API distinguishes that draft from clear.\n const captureField = useCallback((field: FieldRef<Dayjs | null> | null) => {\n if (!field) return;\n const sections = field.getSections();\n setPartial(sections.some((section) => section.value !== '') && sections.some((section) => section.value === ''));\n }, []);\n const invalidDraft = invalid || partial;\n const published = useRef(value);\n const input = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n if (published.current !== value) {\n published.current = value;\n setDraft(parseCalendarValue(value, kind));\n }\n }, [value, kind]);\n useEffect(() => {\n input.current?.setCustomValidity(invalidDraft ? invalidText : '');\n onValidityChange?.(!invalidDraft && (!required || draft !== null));\n }, [invalidDraft, invalidText, onValidityChange, required, draft]);\n const onValue = (next: Dayjs | null, context: { validationError: unknown }) => {\n const failed = context.validationError != null || (next !== null && !next.isValid());\n setDraft(next);\n setInvalid(failed);\n const text = failed ? '' : formatCalendarValue(next, kind, precision);\n published.current = text;\n onChange(text);\n };\n const props = {\n label,\n value: draft,\n timezone: 'UTC',\n onChange: onValue,\n onError: (error: unknown) => setInvalid(error != null),\n inputRef: input,\n disabled,\n readOnly,\n sx,\n slotProps: {\n textField: {\n name,\n required,\n size,\n fullWidth,\n error: invalidDraft,\n helperText: invalidDraft ? invalidText : helperText,\n },\n field: { clearable: true, fieldRef: captureField },\n popper: {\n modifiers: [\n { name: 'flip', options: { rootBoundary: 'viewport', padding: 8 } },\n {\n name: 'preventOverflow',\n // For a top/bottom placement the alternate axis is vertical. A\n // calendar may fit the viewport but neither side of its anchor;\n // permit overlap with the anchor rather than hiding its actions.\n options: { rootBoundary: 'viewport', padding: 8, mainAxis: true, altAxis: true, tether: false },\n },\n ],\n },\n desktopPaper: {\n sx: { maxHeight: 'calc(100dvh - 16px)', maxWidth: 'calc(100vw - 16px)', overflow: 'auto' },\n },\n actionBar: { actions: ['clear', 'cancel', 'accept'] as ('clear' | 'cancel' | 'accept')[] },\n },\n };\n const lower = min ? (parseCalendarValue(min, kind) ?? undefined) : undefined;\n const upper = max ? (parseCalendarValue(max, kind) ?? undefined) : undefined;\n if (kind === 'date') return <DatePicker {...props} minDate={lower} maxDate={upper} />;\n const views = precision === 'second' ? (['hours', 'minutes', 'seconds'] as const) : (['hours', 'minutes'] as const);\n if (kind === 'time') return <TimePicker {...props} ampm={false} views={[...views]} minTime={lower} maxTime={upper} />;\n return (\n <DateTimePicker {...props} ampm={false} views={['year', 'day', ...views]} minDateTime={lower} maxDateTime={upper} />\n );\n}\nexport function PrismDatePicker(props: PrismCalendarInputProps) {\n return <CalendarInput {...props} kind=\"date\" />;\n}\nexport function PrismTimePicker(props: PrismCalendarInputProps) {\n return <CalendarInput {...props} kind=\"time\" />;\n}\nexport function PrismDateTimePicker(props: PrismCalendarInputProps) {\n return <CalendarInput {...props} kind=\"datetime\" />;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnitron-dev/prism",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Design System Constructor - High-level UI building blocks for complex frontends",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -67,7 +67,39 @@
67
67
  "./cli": {
68
68
  "types": "./dist/cli/index.d.ts",
69
69
  "import": "./dist/cli/index.js"
70
- }
70
+ },
71
+ "./components/research": {
72
+ "types": "./dist/components/research/index.d.ts",
73
+ "import": "./dist/components/research/index.js"
74
+ },
75
+ "./components/research/styles.css": "./dist/components/research/index.css",
76
+ "./components/research-editor": {
77
+ "types": "./dist/components/research-editor/index.d.ts",
78
+ "import": "./dist/components/research-editor/index.js"
79
+ },
80
+ "./components/research-editor/styles.css": "./dist/components/research-editor/index.css",
81
+ "./components/knowledge-graph": {
82
+ "types": "./dist/components/knowledge-graph/index.d.ts",
83
+ "import": "./dist/components/knowledge-graph/index.js"
84
+ },
85
+ "./components/knowledge-graph/styles.css": "./dist/components/knowledge-graph/index.css",
86
+ "./ui": {
87
+ "types": "./dist/ui/index.d.ts",
88
+ "import": "./dist/ui/index.js"
89
+ },
90
+ "./components/doc-layout": {
91
+ "types": "./dist/components/doc-layout/index.d.ts",
92
+ "import": "./dist/components/doc-layout/index.js"
93
+ },
94
+ "./icons": {
95
+ "types": "./dist/icons/index.d.ts",
96
+ "import": "./dist/icons/index.js"
97
+ },
98
+ "./components/map": {
99
+ "types": "./dist/components/map/index.d.ts",
100
+ "import": "./dist/components/map/index.js"
101
+ },
102
+ "./components/map/styles.css": "./dist/components/map/index.css"
71
103
  },
72
104
  "bin": {
73
105
  "prism": "./bin/prism.js"
@@ -82,38 +114,52 @@
82
114
  "@emotion/cache": "^11.14.0",
83
115
  "@emotion/react": "^11.14.0",
84
116
  "@emotion/styled": "^11.14.1",
85
- "@hookform/resolvers": "5.2.2",
86
- "@mui/icons-material": "^9.4.0",
87
- "@mui/material": "^9.4.0",
88
- "@mui/system": "^9.4.0",
89
- "@mui/x-data-grid": "^9.13.0",
90
- "@mui/x-date-pickers": "^9.13.0",
91
- "@tanstack/react-virtual": "^3.14.10",
92
- "@tiptap/core": "^3.31.3",
93
- "@tiptap/extension-code-block-lowlight": "^3.31.3",
94
- "@tiptap/extension-image": "^3.31.3",
95
- "@tiptap/extension-link": "^3.31.3",
96
- "@tiptap/extension-placeholder": "^3.31.3",
97
- "@tiptap/extension-task-item": "^3.31.3",
98
- "@tiptap/extension-task-list": "^3.31.3",
99
- "@tiptap/extension-text-align": "^3.31.3",
100
- "@tiptap/extension-underline": "^3.31.3",
101
- "@tiptap/pm": "^3.31.3",
102
- "@tiptap/react": "^3.31.3",
103
- "@tiptap/starter-kit": "^3.31.3",
117
+ "@hookform/resolvers": "6.0.0",
118
+ "@mui/icons-material": "^9.5.0",
119
+ "@mui/material": "^9.5.0",
120
+ "@mui/system": "^9.5.0",
121
+ "@mui/x-data-grid": "^9.16.0",
122
+ "@mui/x-date-pickers": "^9.16.0",
123
+ "@tanstack/react-virtual": "^3.14.22",
124
+ "@tiptap/core": "^3.32.0",
125
+ "@tiptap/extension-code-block-lowlight": "^3.32.0",
126
+ "@tiptap/extension-image": "^3.32.0",
127
+ "@tiptap/extension-link": "^3.32.0",
128
+ "@tiptap/extension-placeholder": "^3.32.0",
129
+ "@tiptap/extension-table": "^3.32.0",
130
+ "@tiptap/extension-task-item": "^3.32.0",
131
+ "@tiptap/extension-task-list": "^3.32.0",
132
+ "@tiptap/extension-text-align": "^3.32.0",
133
+ "@tiptap/extension-underline": "^3.32.0",
134
+ "@tiptap/pm": "^3.32.0",
135
+ "@tiptap/react": "^3.32.0",
136
+ "@tiptap/starter-kit": "^3.32.0",
104
137
  "@types/turndown": "^5.0.6",
138
+ "@xyflow/react": "^12.12.0",
105
139
  "class-variance-authority": "^0.7.1",
106
140
  "clsx": "^2.1.1",
107
- "commander": "^14.0.3",
141
+ "commander": "^15.0.0",
108
142
  "dayjs": "^1.11.23",
109
- "framer-motion": "^13.2.0",
110
- "immer": "^11.1.18",
143
+ "dompurify": "^3.4.17",
144
+ "framer-motion": "^14.6.0",
145
+ "immer": "^11.2.9",
146
+ "katex": "^0.19.0",
111
147
  "lowlight": "^3.3.0",
112
- "maplibre-gl": "^6.7.0",
148
+ "maplibre-gl": "^6.15.0",
149
+ "mathlive": "0.111.1",
150
+ "mdast-util-directive": "^3.1.1",
151
+ "mdast-util-from-markdown": "^2.1.0",
152
+ "mdast-util-gfm": "^3.1.0",
153
+ "mdast-util-math": "^3.0.0",
154
+ "mdast-util-to-markdown": "^2.2.0",
155
+ "mermaid": "^12.2.0",
156
+ "micromark-extension-directive": "^4.0.0",
157
+ "micromark-extension-gfm": "^3.0.0",
158
+ "micromark-extension-math": "^3.1.0",
113
159
  "nprogress": "^0.2.0",
114
160
  "pmtiles": "^4.5.0",
115
- "react-dropzone": "^20.1.1",
116
- "react-hook-form": "^7.87.0",
161
+ "react-dropzone": "^20.1.4",
162
+ "react-hook-form": "^7.90.0",
117
163
  "react-map-gl": "^8.1.3",
118
164
  "react-markdown": "^10.1.0",
119
165
  "rehype-highlight": "^7.0.2",
@@ -123,33 +169,34 @@
123
169
  "stylis": "^4.4.0",
124
170
  "stylis-plugin-rtl": "^2.1.1",
125
171
  "turndown": "^7.2.4",
126
- "zod": "^4.5.4",
127
- "zustand": "^5.0.15",
128
- "@omnitron-dev/netron-browser": "0.3.0",
129
- "@omnitron-dev/netron-react": "0.3.0"
172
+ "zod": "^4.6.7",
173
+ "zustand": "^5.0.16",
174
+ "@omnitron-dev/netron-browser": "0.3.1",
175
+ "@omnitron-dev/netron-react": "0.3.1"
130
176
  },
131
177
  "devDependencies": {
132
- "@axe-core/playwright": "^4.13.0",
133
- "@mui/lab": "9.0.0-beta.3",
134
- "@playwright/test": "^1.62.1",
178
+ "@axe-core/playwright": "^4.14.0",
179
+ "@mui/lab": "9.0.0-beta.10",
180
+ "@playwright/test": "^1.64.1",
135
181
  "@testing-library/jest-dom": "^7.0.1",
136
182
  "@testing-library/react": "^16.3.3",
137
- "@testing-library/user-event": "^14.6.7",
138
- "@types/node": "^25.9.5",
183
+ "@testing-library/user-event": "^14.6.8",
184
+ "@types/node": "^26.6.5",
139
185
  "@types/nprogress": "^0.2.3",
140
- "@types/react": "^19.2.18",
141
- "@types/react-dom": "^19.2.7",
186
+ "@types/react": "^19.3.0",
187
+ "@types/react-dom": "^19.3.0",
142
188
  "@vitejs/plugin-react-swc": "^4.3.3",
143
- "@vitest/coverage-v8": "^5.0.0",
144
- "apexcharts": "^7.1.0",
145
- "happy-dom": "^20.14.0",
189
+ "@vitest/coverage-v8": "^5.0.5",
190
+ "apexcharts": "^8.4.1",
191
+ "happy-dom": "^21.0.4",
192
+ "jsdom": "^30.1.3",
146
193
  "react-apexcharts": "^2.1.1",
147
- "react-router-dom": "7.18.3",
194
+ "react-router-dom": "7.18.4",
148
195
  "sonner": "^2.0.8",
149
- "tsup": "^8.5.1",
196
+ "tsup": "^9.0.0",
150
197
  "typescript": "^7.0.2",
151
- "vite": "^8.2.2",
152
- "vitest": "^5.0.0"
198
+ "vite": "^8.3.5",
199
+ "vitest": "^5.0.5"
153
200
  },
154
201
  "peerDependencies": {
155
202
  "apexcharts": ">=5.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/theme/palette.ts","../src/theme/presets/default.ts","../src/theme/presets/luxury.ts","../src/theme/presets/nature.ts","../src/theme/presets/index.ts","../src/theme/css-variables.ts"],"names":["lightPalette","darkPalette"],"mappings":"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","file":"chunk-6AHI4GSV.js","sourcesContent":["/**\n * Palette Utilities\n *\n * Utilities for palette manipulation and CSS channel generation.\n * All color math uses HSL for perceptually correct results.\n *\n * @module theme/palette\n */\n\nimport type { ThemePalette, PaletteColor, ColorScale, ColorScaleWithChannels } from '../types/theme.js';\nimport {\n generatePaletteColorWithChannels,\n generateColorScaleWithChannels,\n hexToRgbChannel,\n lighten,\n darken,\n} from './utils/color.js';\n\n/**\n * Generate RGB channel string from hex color.\n *\n * @param hex - Hex color value\n * @returns RGB channel string (e.g., \"255 255 255\")\n */\nexport function generatePaletteChannel(hex: string): string {\n return hexToRgbChannel(hex);\n}\n\n/**\n * Generate a full palette color from a main color.\n * Uses HSL-based color math for perceptually correct shades.\n *\n * @param main - Main color hex value\n * @param contrastText - Contrast text color (default: white)\n * @returns Full palette color with all shades\n */\nexport function generatePaletteColor(main: string, contrastText = '#FFFFFF'): PaletteColor {\n // HSL lightness adjustments (percentage points)\n // These values produce visually balanced shade progressions\n return {\n lighter: lighten(main, 32), // +32 lightness points (very light, ~85-95% L)\n light: lighten(main, 16), // +16 lightness points (light, ~65-75% L)\n main, // Base color (typically ~45-55% L)\n dark: darken(main, 12), // -12 lightness points (dark, ~35-45% L)\n darker: darken(main, 28), // -28 lightness points (very dark, ~20-30% L)\n contrastText,\n };\n}\n\n/**\n * Apply primary color override to a palette.\n *\n * @param palette - Base palette\n * @param primaryColor - New primary color\n * @param mode - Theme mode (light/dark)\n * @returns Updated palette with new primary color\n */\nexport function applyPrimaryOverride(\n palette: ThemePalette,\n primaryColor: string,\n mode: 'light' | 'dark' = 'light'\n): ThemePalette {\n const contrastText = mode === 'dark' ? '#FFFFFF' : '#FFFFFF';\n const basePrimary = generatePaletteColor(primaryColor, contrastText);\n const newPrimary = generatePaletteColorWithChannels(basePrimary);\n\n return {\n ...palette,\n primary: newPrimary,\n };\n}\n\n/**\n * Create grey palette.\n */\nexport function createGreyPalette(): ColorScaleWithChannels {\n const scale: ColorScale = {\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#EEEEEE',\n 300: '#E0E0E0',\n 400: '#BDBDBD',\n 500: '#9E9E9E',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n 950: '#121212',\n };\n return generateColorScaleWithChannels(scale);\n}\n\n/**\n * Create dark mode grey palette.\n */\nexport function createDarkGreyPalette(): ColorScaleWithChannels {\n const scale: ColorScale = {\n 50: '#1A1A1A',\n 100: '#242424',\n 200: '#2E2E2E',\n 300: '#383838',\n 400: '#454545',\n 500: '#5C5C5C',\n 600: '#757575',\n 700: '#9E9E9E',\n 800: '#BDBDBD',\n 900: '#E0E0E0',\n 950: '#F5F5F5',\n };\n return generateColorScaleWithChannels(scale);\n}\n","/**\n * Default Theme Preset\n *\n * A neutral, modern theme suitable for most applications.\n *\n * @module theme/presets/default\n */\n\nimport type { ThemePresetDefinition, PresetPalette } from '../../types/theme.js';\n\n/**\n * Light mode palette.\n */\nconst lightPalette: PresetPalette = {\n primary: {\n lighter: '#C8FAD6',\n light: '#5BE49B',\n main: '#00A76F',\n dark: '#007867',\n darker: '#004B50',\n contrastText: '#FFFFFF',\n },\n secondary: {\n lighter: '#EFD6FF',\n light: '#C684FF',\n main: '#8E33FF',\n dark: '#5119B7',\n darker: '#27097A',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#CAFDF5',\n light: '#61F3F3',\n main: '#00B8D9',\n dark: '#006C9C',\n darker: '#003768',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D3FCD2',\n light: '#77ED8B',\n main: '#22C55E',\n dark: '#118D57',\n darker: '#065E49',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF5CC',\n light: '#FFD666',\n main: '#FFAB00',\n dark: '#B76E00',\n darker: '#7A4100',\n contrastText: '#212121',\n },\n error: {\n lighter: '#FFE9D5',\n light: '#FFAC82',\n main: '#FF5630',\n dark: '#B71D18',\n darker: '#7A0916',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#EEEEEE',\n 300: '#E0E0E0',\n 400: '#BDBDBD',\n 500: '#9E9E9E',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n },\n common: {\n black: '#000000',\n white: '#FFFFFF',\n },\n background: {\n default: '#FFFFFF',\n paper: '#FFFFFF',\n neutral: '#F4F6F8',\n },\n text: {\n primary: '#212121',\n secondary: '#637381',\n disabled: '#919EAB',\n },\n};\n\n/**\n * Dark mode palette.\n */\nconst darkPalette: PresetPalette = {\n primary: {\n lighter: '#C8FAD6',\n light: '#5BE49B',\n main: '#00A76F',\n dark: '#007867',\n darker: '#004B50',\n contrastText: '#FFFFFF',\n },\n secondary: {\n lighter: '#EFD6FF',\n light: '#C684FF',\n main: '#8E33FF',\n dark: '#5119B7',\n darker: '#27097A',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#CAFDF5',\n light: '#61F3F3',\n main: '#00B8D9',\n dark: '#006C9C',\n darker: '#003768',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D3FCD2',\n light: '#77ED8B',\n main: '#22C55E',\n dark: '#118D57',\n darker: '#065E49',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF5CC',\n light: '#FFD666',\n main: '#FFAB00',\n dark: '#B76E00',\n darker: '#7A4100',\n contrastText: '#212121',\n },\n error: {\n lighter: '#FFE9D5',\n light: '#FFAC82',\n main: '#FF5630',\n dark: '#B71D18',\n darker: '#7A0916',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#161C24',\n 100: '#212B36',\n 200: '#454F5B',\n 300: '#637381',\n 400: '#919EAB',\n 500: '#C4CDD5',\n 600: '#DFE3E8',\n 700: '#F4F6F8',\n 800: '#F9FAFB',\n 900: '#FFFFFF',\n },\n common: {\n black: '#000000',\n white: '#FFFFFF',\n },\n background: {\n default: '#161C24',\n paper: '#212B36',\n neutral: '#28323D',\n },\n text: {\n primary: '#FFFFFF',\n secondary: '#919EAB',\n disabled: '#637381',\n },\n};\n\n/**\n * Default theme preset.\n */\nexport const defaultPreset: ThemePresetDefinition = {\n name: 'default-light',\n displayName: 'Default',\n description: 'A neutral, modern theme suitable for most applications.',\n preferredMode: 'light',\n lightPalette,\n darkPalette,\n typography: {\n fontFamily: {\n primary: '\"Public Sans Variable\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n secondary: '\"Barlow\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: '\"JetBrains Mono\", \"Fira Code\", Consolas, Monaco, monospace',\n },\n fontWeights: {\n light: 300,\n regular: 400,\n medium: 500,\n semiBold: 600,\n bold: 700,\n },\n },\n colorGroup: {\n key: 'default',\n main: '#00A76F',\n },\n};\n","/**\n * Luxury Theme Preset\n *\n * A rich, elegant theme with deep colors and premium feel.\n *\n * @module theme/presets/luxury\n */\n\nimport type { ThemePresetDefinition, PresetPalette } from '../../types/theme.js';\n\n/**\n * Light mode palette.\n */\nconst lightPalette: PresetPalette = {\n primary: {\n lighter: '#F5E6D3',\n light: '#D4A574',\n main: '#8B6914',\n dark: '#6B4F0F',\n darker: '#4A370A',\n contrastText: '#FFFFFF',\n },\n secondary: {\n lighter: '#E8D5E8',\n light: '#B38AB3',\n main: '#6B3A6B',\n dark: '#4D2A4D',\n darker: '#2F1A2F',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#D6E4F0',\n light: '#8BBED9',\n main: '#2E7AB8',\n dark: '#1F5A8A',\n darker: '#103A5C',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D8EED3',\n light: '#8BC98A',\n main: '#2E8B2E',\n dark: '#1F6B1F',\n darker: '#104A10',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF3D6',\n light: '#FFD98B',\n main: '#D4A012',\n dark: '#A67A0E',\n darker: '#785509',\n contrastText: '#212121',\n },\n error: {\n lighter: '#F5D6D6',\n light: '#D98B8B',\n main: '#B82E2E',\n dark: '#8A1F1F',\n darker: '#5C1010',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#FAF9F7',\n 100: '#F5F3F0',\n 200: '#E8E4DE',\n 300: '#D4CEC4',\n 400: '#B8AFA0',\n 500: '#9C917C',\n 600: '#7A6F5C',\n 700: '#5C5244',\n 800: '#3E362C',\n 900: '#201C16',\n },\n common: {\n black: '#0D0A06',\n white: '#FFFCF7',\n },\n background: {\n default: '#FFFCF7',\n paper: '#FFFFFF',\n neutral: '#F5F3F0',\n },\n text: {\n primary: '#201C16',\n secondary: '#5C5244',\n disabled: '#9C917C',\n },\n};\n\n/**\n * Dark mode palette.\n */\nconst darkPalette: PresetPalette = {\n primary: {\n lighter: '#F5E6D3',\n light: '#D4A574',\n main: '#C9A227',\n dark: '#A68A1F',\n darker: '#846D18',\n contrastText: '#0D0A06',\n },\n secondary: {\n lighter: '#E8D5E8',\n light: '#B38AB3',\n main: '#9B5A9B',\n dark: '#7D4A7D',\n darker: '#5F3A5F',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#D6E4F0',\n light: '#8BBED9',\n main: '#4E9AD4',\n dark: '#3A7AB0',\n darker: '#265A8C',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D8EED3',\n light: '#8BC98A',\n main: '#4EAB4E',\n dark: '#3A8B3A',\n darker: '#266B26',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF3D6',\n light: '#FFD98B',\n main: '#E8B612',\n dark: '#C49A0E',\n darker: '#A07E0A',\n contrastText: '#0D0A06',\n },\n error: {\n lighter: '#F5D6D6',\n light: '#D98B8B',\n main: '#D44E4E',\n dark: '#B03A3A',\n darker: '#8C2626',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#18140E',\n 100: '#241E16',\n 200: '#362E22',\n 300: '#4A402E',\n 400: '#5E523A',\n 500: '#7A6F5C',\n 600: '#9C917C',\n 700: '#B8AFA0',\n 800: '#D4CEC4',\n 900: '#E8E4DE',\n },\n common: {\n black: '#0D0A06',\n white: '#FFFCF7',\n },\n background: {\n default: '#0D0A06',\n paper: '#18140E',\n neutral: '#241E16',\n },\n text: {\n primary: '#E8E4DE',\n secondary: '#B8AFA0',\n disabled: '#7A6F5C',\n },\n};\n\n/**\n * Luxury theme preset.\n */\nexport const luxuryPreset: ThemePresetDefinition = {\n name: 'luxury',\n displayName: 'Luxury',\n description: 'A rich, elegant theme with deep colors and premium feel.',\n preferredMode: 'light',\n lightPalette,\n darkPalette,\n typography: {\n fontFamily: {\n primary: '\"Playfair Display\", Georgia, \"Times New Roman\", serif',\n secondary: '\"Lato\", -apple-system, BlinkMacSystemFont, sans-serif',\n mono: '\"JetBrains Mono\", Consolas, Monaco, monospace',\n },\n fontWeights: {\n light: 300,\n regular: 400,\n medium: 500,\n semiBold: 600,\n bold: 700,\n },\n },\n colorGroup: {\n key: 'luxury',\n main: '#8B6914',\n },\n};\n","/**\n * Nature Theme Preset\n *\n * An earthy, organic theme with warm greens and natural tones.\n *\n * @module theme/presets/nature\n */\n\nimport type { ThemePresetDefinition } from '../../types/theme.js';\nimport { green } from '../colors/base.js';\n\n/**\n * Nature theme preset.\n * Optimized for light mode with earthy green tones.\n */\nexport const naturePreset: ThemePresetDefinition = {\n name: 'nature',\n displayName: 'Nature',\n description: 'An earthy, organic theme with warm greens and natural tones.',\n preferredMode: 'light',\n typography: {\n fontFamily: {\n primary: '\"Nunito\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n secondary: '\"Merriweather\", Georgia, serif',\n mono: '\"JetBrains Mono\", Consolas, Monaco, monospace',\n },\n fontWeights: {\n light: 300,\n regular: 400,\n medium: 500,\n semiBold: 600,\n bold: 700,\n },\n },\n colorGroup: {\n key: 'nature',\n main: green[500],\n palette: green,\n },\n};\n","/**\n * Theme Presets Index\n *\n * @module theme/presets\n */\n\nimport type { ThemePreset, ThemePresetDefinition } from '../../types/theme.js';\nimport { defaultPreset } from './default.js';\nimport { luxuryPreset } from './luxury.js';\nimport { arcticPreset } from './arctic.js';\nimport { naturePreset } from './nature.js';\nimport { emberPreset } from './ember.js';\nimport { draculaPreset } from './dracula.js';\nimport { midnightPreset } from './midnight.js';\nimport { retroPreset } from './retro.js';\nimport { minimalPreset } from './minimal.js';\n\n/**\n * All available preset names.\n */\nexport const presetNames: ThemePreset[] = [\n 'default-light',\n 'default-dark',\n 'luxury',\n 'arctic',\n 'nature',\n 'ember',\n 'dracula',\n 'midnight',\n 'retro',\n 'minimal',\n];\n\n/**\n * Preset registry.\n */\nconst presets: Record<string, ThemePresetDefinition> = {\n 'default-light': defaultPreset,\n 'default-dark': defaultPreset, // Uses same preset but different preferred mode\n luxury: luxuryPreset,\n arctic: arcticPreset,\n nature: naturePreset,\n ember: emberPreset,\n dracula: draculaPreset,\n midnight: midnightPreset,\n retro: retroPreset,\n minimal: minimalPreset,\n};\n\n/**\n * Get a theme preset by name.\n *\n * @param name - Preset name\n * @returns Theme preset definition\n * @throws If preset is not found\n */\nexport function getPreset(name: ThemePreset): ThemePresetDefinition {\n const preset = presets[name];\n\n if (!preset) {\n console.warn(`Preset \"${name}\" not found, falling back to \"default-light\"`);\n return defaultPreset;\n }\n\n return preset;\n}\n\n/**\n * Register a custom preset.\n *\n * @param name - Preset name\n * @param preset - Preset definition\n */\nexport function registerPreset(name: string, preset: ThemePresetDefinition): void {\n presets[name] = preset;\n}\n\n/**\n * Get all registered presets.\n */\nexport function getAllPresets(): Record<string, ThemePresetDefinition> {\n return { ...presets };\n}\n\n// Re-export presets\nexport { defaultPreset } from './default.js';\nexport { luxuryPreset } from './luxury.js';\nexport { arcticPreset } from './arctic.js';\nexport { naturePreset } from './nature.js';\nexport { emberPreset } from './ember.js';\nexport { draculaPreset } from './dracula.js';\nexport { midnightPreset } from './midnight.js';\nexport { retroPreset } from './retro.js';\nexport { minimalPreset } from './minimal.js';\n","/**\n * CSS Variables System\n *\n * Utilities for generating and managing CSS variables.\n *\n * @module theme/css-variables\n */\n\nimport type { PrismTheme, CssVariablesConfig } from '../types/theme.js';\nimport { generatePaletteChannel } from './palette.js';\n\n/**\n * CSS variable definitions.\n * Uses an index signature since keys are dynamically generated based on prefix.\n */\nexport interface CssVariables {\n [key: string]: string;\n}\n\n/**\n * Default CSS variable values.\n */\nexport const cssVariables: CssVariables = {\n '--prism-background': '#FFFFFF',\n '--prism-foreground': '#212121',\n '--prism-card': '#FFFFFF',\n '--prism-card-foreground': '#212121',\n '--prism-popover': '#FFFFFF',\n '--prism-popover-foreground': '#212121',\n\n '--prism-primary': '#00A76F',\n '--prism-primary-foreground': '#FFFFFF',\n '--prism-primary-lighter': '#C8FAD6',\n '--prism-primary-light': '#5BE49B',\n '--prism-primary-dark': '#007867',\n '--prism-primary-darker': '#004B50',\n\n '--prism-secondary': '#8E33FF',\n '--prism-secondary-foreground': '#FFFFFF',\n\n '--prism-muted': '#F4F6F8',\n '--prism-muted-foreground': '#637381',\n '--prism-accent': '#F4F6F8',\n '--prism-accent-foreground': '#212121',\n '--prism-destructive': '#FF5630',\n '--prism-destructive-foreground': '#FFFFFF',\n\n '--prism-border': '#E0E0E0',\n '--prism-input': '#E0E0E0',\n '--prism-ring': '#00A76F',\n\n '--prism-radius': '0.5rem',\n\n '--prism-primary-channel': '0 167 111',\n '--prism-secondary-channel': '142 51 255',\n '--prism-background-channel': '255 255 255',\n};\n\n/**\n * Generate CSS variables from a Prism theme.\n *\n * @param theme - Prism theme\n * @param config - CSS variables configuration\n * @returns CSS variables object\n */\nexport function generateCssVariables(theme: PrismTheme, config: CssVariablesConfig): CssVariables {\n const { prefix } = config;\n const { palette } = theme;\n\n const vars: CssVariables = {\n [`--${prefix}-background`]: palette.background.default,\n [`--${prefix}-foreground`]: palette.text.primary,\n [`--${prefix}-card`]: palette.background.paper,\n [`--${prefix}-card-foreground`]: palette.text.primary,\n [`--${prefix}-popover`]: palette.background.paper,\n [`--${prefix}-popover-foreground`]: palette.text.primary,\n\n [`--${prefix}-primary`]: palette.primary.main,\n [`--${prefix}-primary-foreground`]: palette.primary.contrastText,\n [`--${prefix}-primary-lighter`]:\n (palette.primary as unknown as { lighter?: string }).lighter || palette.primary.light,\n [`--${prefix}-primary-light`]: palette.primary.light,\n [`--${prefix}-primary-dark`]: palette.primary.dark,\n [`--${prefix}-primary-darker`]: (palette.primary as unknown as { darker?: string }).darker || palette.primary.dark,\n\n [`--${prefix}-secondary`]: palette.secondary.main,\n [`--${prefix}-secondary-foreground`]: palette.secondary.contrastText,\n\n [`--${prefix}-muted`]: palette.background.default,\n [`--${prefix}-muted-foreground`]: palette.text.secondary,\n [`--${prefix}-accent`]: palette.background.default,\n [`--${prefix}-accent-foreground`]: palette.text.primary,\n [`--${prefix}-destructive`]: palette.error.main,\n [`--${prefix}-destructive-foreground`]: palette.error.contrastText,\n\n [`--${prefix}-border`]: palette.divider || palette.grey[300],\n [`--${prefix}-input`]: palette.divider || palette.grey[300],\n [`--${prefix}-ring`]: palette.primary.main,\n\n [`--${prefix}-radius`]: `${theme.shape.borderRadius}px`,\n\n [`--${prefix}-primary-channel`]: generatePaletteChannel(palette.primary.main),\n [`--${prefix}-secondary-channel`]: generatePaletteChannel(palette.secondary.main),\n [`--${prefix}-background-channel`]: generatePaletteChannel(palette.background.default),\n };\n\n // Inject into document if in browser\n if (typeof document !== 'undefined') {\n injectCssVariables(vars, config);\n }\n\n return vars;\n}\n\n/**\n * Inject CSS variables into the document.\n *\n * @param vars - CSS variables object\n * @param config - CSS variables configuration\n */\nfunction injectCssVariables(vars: CssVariables, config: CssVariablesConfig): void {\n const root = document.documentElement;\n\n Object.entries(vars).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n}\n\n/**\n * Get computed CSS variable value.\n *\n * @param name - Variable name (with or without --)\n * @returns Computed value\n */\nexport function getCssVariable(name: string): string {\n if (typeof window === 'undefined') return '';\n\n const varName = name.startsWith('--') ? name : `--${name}`;\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n}\n\n/**\n * Set CSS variable value.\n *\n * @param name - Variable name (with or without --)\n * @param value - New value\n */\nexport function setCssVariable(name: string, value: string): void {\n if (typeof document === 'undefined') return;\n\n const varName = name.startsWith('--') ? name : `--${name}`;\n document.documentElement.style.setProperty(varName, value);\n}\n"]}