@mihcm/ui 0.14.1 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CheckboxGrid.native.d.ts.map +1 -1
- package/dist/CheckboxGrid.native.js +2 -1
- package/dist/CheckboxGrid.native.js.map +1 -1
- package/dist/Combobox.native.d.ts.map +1 -1
- package/dist/Combobox.native.js +2 -1
- package/dist/Combobox.native.js.map +1 -1
- package/dist/DataTable/column-filter.d.ts +8 -0
- package/dist/DataTable/column-filter.d.ts.map +1 -0
- package/dist/DataTable/column-filter.js +67 -0
- package/dist/DataTable/column-filter.js.map +1 -0
- package/dist/DataTable/column-header.d.ts +16 -0
- package/dist/DataTable/column-header.d.ts.map +1 -0
- package/dist/DataTable/column-header.js +11 -0
- package/dist/DataTable/column-header.js.map +1 -0
- package/dist/DataTable/column-visibility.d.ts +7 -0
- package/dist/DataTable/column-visibility.d.ts.map +1 -0
- package/dist/DataTable/column-visibility.js +35 -0
- package/dist/DataTable/column-visibility.js.map +1 -0
- package/dist/DataTable/index.d.ts +5 -0
- package/dist/DataTable/index.d.ts.map +1 -0
- package/dist/DataTable/index.js +5 -0
- package/dist/DataTable/index.js.map +1 -0
- package/dist/DataTable/pinning.d.ts +13 -0
- package/dist/DataTable/pinning.d.ts.map +1 -0
- package/dist/DataTable/pinning.js +29 -0
- package/dist/DataTable/pinning.js.map +1 -0
- package/dist/DataTable.d.ts +3 -7
- package/dist/DataTable.d.ts.map +1 -1
- package/dist/DataTable.js +7 -126
- package/dist/DataTable.js.map +1 -1
- package/dist/Dialog.native.d.ts +3 -1
- package/dist/Dialog.native.d.ts.map +1 -1
- package/dist/Dialog.native.js +2 -2
- package/dist/Dialog.native.js.map +1 -1
- package/dist/Form/building-blocks.d.ts +26 -0
- package/dist/Form/building-blocks.d.ts.map +1 -0
- package/dist/Form/building-blocks.js +29 -0
- package/dist/Form/building-blocks.js.map +1 -0
- package/dist/Form/fields-choice.d.ts +72 -0
- package/dist/Form/fields-choice.d.ts.map +1 -0
- package/dist/Form/fields-choice.js +69 -0
- package/dist/Form/fields-choice.js.map +1 -0
- package/dist/Form/fields-complex.d.ts +28 -0
- package/dist/Form/fields-complex.d.ts.map +1 -0
- package/dist/Form/fields-complex.js +38 -0
- package/dist/Form/fields-complex.js.map +1 -0
- package/dist/Form/fields-date.d.ts +46 -0
- package/dist/Form/fields-date.d.ts.map +1 -0
- package/dist/Form/fields-date.js +41 -0
- package/dist/Form/fields-date.js.map +1 -0
- package/dist/Form/fields-text.d.ts +47 -0
- package/dist/Form/fields-text.d.ts.map +1 -0
- package/dist/Form/fields-text.js +46 -0
- package/dist/Form/fields-text.js.map +1 -0
- package/dist/Form/fields-toggle.d.ts +24 -0
- package/dist/Form/fields-toggle.d.ts.map +1 -0
- package/dist/Form/fields-toggle.js +32 -0
- package/dist/Form/fields-toggle.js.map +1 -0
- package/dist/Form/helpers.d.ts +66 -0
- package/dist/Form/helpers.d.ts.map +1 -0
- package/dist/Form/helpers.js +44 -0
- package/dist/Form/helpers.js.map +1 -0
- package/dist/Form/types.d.ts +25 -0
- package/dist/Form/types.d.ts.map +1 -0
- package/dist/Form/types.js +8 -0
- package/dist/Form/types.js.map +1 -0
- package/dist/Form.d.ts +24 -298
- package/dist/Form.d.ts.map +1 -1
- package/dist/Form.js +30 -246
- package/dist/Form.js.map +1 -1
- package/dist/IconSidebar.d.ts +6 -46
- package/dist/IconSidebar.d.ts.map +1 -1
- package/dist/IconSidebar.js +6 -116
- package/dist/IconSidebar.js.map +1 -1
- package/dist/MainSidebar/back-button.d.ts +14 -0
- package/dist/MainSidebar/back-button.d.ts.map +1 -0
- package/dist/MainSidebar/back-button.js +14 -0
- package/dist/MainSidebar/back-button.js.map +1 -0
- package/dist/MainSidebar/breadcrumb.d.ts +10 -0
- package/dist/MainSidebar/breadcrumb.d.ts.map +1 -0
- package/dist/MainSidebar/breadcrumb.js +24 -0
- package/dist/MainSidebar/breadcrumb.js.map +1 -0
- package/dist/MainSidebar/columns.d.ts +3 -0
- package/dist/MainSidebar/columns.d.ts.map +1 -0
- package/dist/MainSidebar/columns.js +198 -0
- package/dist/MainSidebar/columns.js.map +1 -0
- package/dist/MainSidebar/command.d.ts +3 -0
- package/dist/MainSidebar/command.d.ts.map +1 -0
- package/dist/MainSidebar/command.js +193 -0
- package/dist/MainSidebar/command.js.map +1 -0
- package/dist/MainSidebar/drilldown.d.ts +3 -0
- package/dist/MainSidebar/drilldown.d.ts.map +1 -0
- package/dist/MainSidebar/drilldown.js +154 -0
- package/dist/MainSidebar/drilldown.js.map +1 -0
- package/dist/MainSidebar/expanded.d.ts +7 -0
- package/dist/MainSidebar/expanded.d.ts.map +1 -0
- package/dist/MainSidebar/expanded.js +102 -0
- package/dist/MainSidebar/expanded.js.map +1 -0
- package/dist/MainSidebar/floating.d.ts +3 -0
- package/dist/MainSidebar/floating.d.ts.map +1 -0
- package/dist/MainSidebar/floating.js +116 -0
- package/dist/MainSidebar/floating.js.map +1 -0
- package/dist/MainSidebar/helpers.d.ts +50 -0
- package/dist/MainSidebar/helpers.d.ts.map +1 -0
- package/dist/MainSidebar/helpers.js +148 -0
- package/dist/MainSidebar/helpers.js.map +1 -0
- package/dist/MainSidebar/hover.d.ts +3 -0
- package/dist/MainSidebar/hover.d.ts.map +1 -0
- package/dist/MainSidebar/hover.js +177 -0
- package/dist/MainSidebar/hover.js.map +1 -0
- package/dist/MainSidebar/index.d.ts +6 -0
- package/dist/MainSidebar/index.d.ts.map +1 -0
- package/dist/MainSidebar/index.js +108 -0
- package/dist/MainSidebar/index.js.map +1 -0
- package/dist/MainSidebar/mobile.d.ts +29 -0
- package/dist/MainSidebar/mobile.d.ts.map +1 -0
- package/dist/MainSidebar/mobile.js +38 -0
- package/dist/MainSidebar/mobile.js.map +1 -0
- package/dist/MainSidebar/motion.d.ts +23 -0
- package/dist/MainSidebar/motion.d.ts.map +1 -0
- package/dist/MainSidebar/motion.js +40 -0
- package/dist/MainSidebar/motion.js.map +1 -0
- package/dist/MainSidebar/rail.d.ts +24 -0
- package/dist/MainSidebar/rail.d.ts.map +1 -0
- package/dist/MainSidebar/rail.js +29 -0
- package/dist/MainSidebar/rail.js.map +1 -0
- package/dist/MainSidebar/search.d.ts +19 -0
- package/dist/MainSidebar/search.d.ts.map +1 -0
- package/dist/MainSidebar/search.js +33 -0
- package/dist/MainSidebar/search.js.map +1 -0
- package/dist/MainSidebar/types.d.ts +161 -0
- package/dist/MainSidebar/types.d.ts.map +1 -0
- package/dist/MainSidebar/types.js +2 -0
- package/dist/MainSidebar/types.js.map +1 -0
- package/dist/MainSidebar.d.ts +6 -1
- package/dist/MainSidebar.d.ts.map +1 -1
- package/dist/MainSidebar.js +6 -1
- package/dist/MainSidebar.js.map +1 -1
- package/dist/NavigationMenu.js +1 -1
- package/dist/NavigationMenu.js.map +1 -1
- package/dist/RichTextEditor/theme.d.ts +44 -0
- package/dist/RichTextEditor/theme.d.ts.map +1 -0
- package/dist/RichTextEditor/theme.js +41 -0
- package/dist/RichTextEditor/theme.js.map +1 -0
- package/dist/RichTextEditor/toolbar-icons.d.ts +21 -0
- package/dist/RichTextEditor/toolbar-icons.d.ts.map +1 -0
- package/dist/RichTextEditor/toolbar-icons.js +21 -0
- package/dist/RichTextEditor/toolbar-icons.js.map +1 -0
- package/dist/RichTextEditor/toolbar.d.ts +5 -0
- package/dist/RichTextEditor/toolbar.d.ts.map +1 -0
- package/dist/RichTextEditor/toolbar.js +116 -0
- package/dist/RichTextEditor/toolbar.js.map +1 -0
- package/dist/RichTextEditor.d.ts +16 -9
- package/dist/RichTextEditor.d.ts.map +1 -1
- package/dist/RichTextEditor.js +18 -164
- package/dist/RichTextEditor.js.map +1 -1
- package/dist/Select/content.d.ts +9 -0
- package/dist/Select/content.d.ts.map +1 -0
- package/dist/Select/content.js +80 -0
- package/dist/Select/content.js.map +1 -0
- package/dist/Select/context.d.ts +27 -0
- package/dist/Select/context.d.ts.map +1 -0
- package/dist/Select/context.js +35 -0
- package/dist/Select/context.js.map +1 -0
- package/dist/Select/item.d.ts +13 -0
- package/dist/Select/item.d.ts.map +1 -0
- package/dist/Select/item.js +39 -0
- package/dist/Select/item.js.map +1 -0
- package/dist/Select/parts.d.ts +14 -0
- package/dist/Select/parts.d.ts.map +1 -0
- package/dist/Select/parts.js +17 -0
- package/dist/Select/parts.js.map +1 -0
- package/dist/Select/react-select.d.ts +25 -0
- package/dist/Select/react-select.d.ts.map +1 -0
- package/dist/Select/react-select.js +66 -0
- package/dist/Select/react-select.js.map +1 -0
- package/dist/Select/root.d.ts +15 -0
- package/dist/Select/root.d.ts.map +1 -0
- package/dist/Select/root.js +41 -0
- package/dist/Select/root.js.map +1 -0
- package/dist/Select/trigger.d.ts +15 -0
- package/dist/Select/trigger.d.ts.map +1 -0
- package/dist/Select/trigger.js +61 -0
- package/dist/Select/trigger.js.map +1 -0
- package/dist/Select.d.ts +14 -62
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +14 -293
- package/dist/Select.js.map +1 -1
- package/dist/Sidebar/context.d.ts +28 -0
- package/dist/Sidebar/context.d.ts.map +1 -0
- package/dist/Sidebar/context.js +37 -0
- package/dist/Sidebar/context.js.map +1 -0
- package/dist/Sidebar/group.d.ts +13 -0
- package/dist/Sidebar/group.d.ts.map +1 -0
- package/dist/Sidebar/group.js +20 -0
- package/dist/Sidebar/group.js.map +1 -0
- package/dist/Sidebar/icons.d.ts +7 -0
- package/dist/Sidebar/icons.d.ts.map +1 -0
- package/dist/Sidebar/icons.js +12 -0
- package/dist/Sidebar/icons.js.map +1 -0
- package/dist/Sidebar/layout.d.ts +9 -0
- package/dist/Sidebar/layout.d.ts.map +1 -0
- package/dist/Sidebar/layout.js +21 -0
- package/dist/Sidebar/layout.js.map +1 -0
- package/dist/Sidebar/menu.d.ts +29 -0
- package/dist/Sidebar/menu.d.ts.map +1 -0
- package/dist/Sidebar/menu.js +55 -0
- package/dist/Sidebar/menu.js.map +1 -0
- package/dist/Sidebar/provider.d.ts +33 -0
- package/dist/Sidebar/provider.d.ts.map +1 -0
- package/dist/Sidebar/provider.js +110 -0
- package/dist/Sidebar/provider.js.map +1 -0
- package/dist/Sidebar/sidebar.d.ts +17 -0
- package/dist/Sidebar/sidebar.d.ts.map +1 -0
- package/dist/Sidebar/sidebar.js +51 -0
- package/dist/Sidebar/sidebar.js.map +1 -0
- package/dist/Sidebar/submenu.d.ts +13 -0
- package/dist/Sidebar/submenu.d.ts.map +1 -0
- package/dist/Sidebar/submenu.js +17 -0
- package/dist/Sidebar/submenu.js.map +1 -0
- package/dist/Sidebar/trigger.d.ts +9 -0
- package/dist/Sidebar/trigger.d.ts.map +1 -0
- package/dist/Sidebar/trigger.js +33 -0
- package/dist/Sidebar/trigger.js.map +1 -0
- package/dist/Sidebar.d.ts +14 -104
- package/dist/Sidebar.d.ts.map +1 -1
- package/dist/Sidebar.js +14 -300
- package/dist/Sidebar.js.map +1 -1
- package/dist/StatCard.d.ts +67 -9
- package/dist/StatCard.d.ts.map +1 -1
- package/dist/StatCard.js +111 -9
- package/dist/StatCard.js.map +1 -1
- package/dist/TransferList.native.d.ts.map +1 -1
- package/dist/TransferList.native.js +2 -1
- package/dist/TransferList.native.js.map +1 -1
- package/package.json +2 -2
- package/src/CheckboxGrid.native.tsx +2 -1
- package/src/Combobox.native.tsx +2 -1
- package/src/DataTable/column-filter.tsx +134 -0
- package/src/DataTable/column-header.tsx +67 -0
- package/src/DataTable/column-visibility.tsx +87 -0
- package/src/DataTable/index.ts +4 -0
- package/src/DataTable/pinning.ts +40 -0
- package/src/DataTable.tsx +14 -297
- package/src/Dialog.native.tsx +4 -2
- package/src/Form/building-blocks.tsx +97 -0
- package/src/Form/fields-choice.tsx +312 -0
- package/src/Form/fields-complex.tsx +195 -0
- package/src/Form/fields-date.tsx +195 -0
- package/src/Form/fields-text.tsx +218 -0
- package/src/Form/fields-toggle.tsx +123 -0
- package/src/Form/helpers.tsx +189 -0
- package/src/Form/types.ts +26 -0
- package/src/Form.tsx +91 -1308
- package/src/IconSidebar.tsx +20 -442
- package/src/MainSidebar/back-button.tsx +58 -0
- package/src/MainSidebar/breadcrumb.tsx +53 -0
- package/src/MainSidebar/columns.tsx +350 -0
- package/src/MainSidebar/command.tsx +404 -0
- package/src/MainSidebar/drilldown.tsx +373 -0
- package/src/MainSidebar/expanded.tsx +414 -0
- package/src/MainSidebar/floating.tsx +268 -0
- package/src/MainSidebar/helpers.ts +164 -0
- package/src/MainSidebar/hover.tsx +334 -0
- package/src/MainSidebar/index.tsx +191 -0
- package/src/MainSidebar/mobile.tsx +117 -0
- package/src/MainSidebar/motion.ts +64 -0
- package/src/MainSidebar/rail.tsx +137 -0
- package/src/MainSidebar/search.tsx +99 -0
- package/src/MainSidebar/types.ts +208 -0
- package/src/MainSidebar.tsx +15 -4
- package/src/NavigationMenu.tsx +1 -1
- package/src/RichTextEditor/theme.ts +43 -0
- package/src/RichTextEditor/toolbar-icons.tsx +40 -0
- package/src/RichTextEditor/toolbar.tsx +271 -0
- package/src/RichTextEditor.tsx +23 -371
- package/src/Select/content.tsx +111 -0
- package/src/Select/context.tsx +66 -0
- package/src/Select/item.tsx +97 -0
- package/src/Select/parts.tsx +43 -0
- package/src/Select/react-select.tsx +216 -0
- package/src/Select/root.tsx +75 -0
- package/src/Select/trigger.tsx +122 -0
- package/src/Select.tsx +34 -692
- package/src/Sidebar/context.tsx +72 -0
- package/src/Sidebar/group.tsx +69 -0
- package/src/Sidebar/icons.tsx +42 -0
- package/src/Sidebar/layout.tsx +64 -0
- package/src/Sidebar/menu.tsx +171 -0
- package/src/Sidebar/provider.tsx +224 -0
- package/src/Sidebar/sidebar.tsx +178 -0
- package/src/Sidebar/submenu.tsx +58 -0
- package/src/Sidebar/trigger.tsx +104 -0
- package/src/Sidebar.tsx +44 -927
- package/src/StatCard.tsx +365 -20
- package/src/TransferList.native.tsx +2 -1
- package/dist/TiptapEditor.d.ts +0 -24
- package/dist/TiptapEditor.d.ts.map +0 -1
- package/dist/TiptapEditor.js +0 -84
- package/dist/TiptapEditor.js.map +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const MOTION_PRESETS = {
|
|
2
|
+
subtle: {
|
|
3
|
+
distance: 4,
|
|
4
|
+
transition: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },
|
|
5
|
+
},
|
|
6
|
+
standard: {
|
|
7
|
+
distance: 8,
|
|
8
|
+
transition: { duration: 0.24, ease: [0.32, 0.72, 0, 1] },
|
|
9
|
+
},
|
|
10
|
+
expressive: {
|
|
11
|
+
distance: 16,
|
|
12
|
+
transition: { type: 'spring', stiffness: 320, damping: 28, mass: 0.9 },
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export function slideVariants(preset, fromSide) {
|
|
16
|
+
const cfg = MOTION_PRESETS[preset];
|
|
17
|
+
const sign = fromSide === 'left' ? -1 : 1;
|
|
18
|
+
return {
|
|
19
|
+
initial: { opacity: 0, x: sign * cfg.distance },
|
|
20
|
+
animate: { opacity: 1, x: 0, transition: cfg.transition },
|
|
21
|
+
exit: { opacity: 0, x: sign * cfg.distance, transition: cfg.transition },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function fadeVariants(preset) {
|
|
25
|
+
const cfg = MOTION_PRESETS[preset];
|
|
26
|
+
return {
|
|
27
|
+
initial: { opacity: 0 },
|
|
28
|
+
animate: { opacity: 1, transition: cfg.transition },
|
|
29
|
+
exit: { opacity: 0, transition: cfg.transition },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function scaleVariants(preset) {
|
|
33
|
+
const cfg = MOTION_PRESETS[preset];
|
|
34
|
+
return {
|
|
35
|
+
initial: { opacity: 0, scale: 0.96, y: -4 },
|
|
36
|
+
animate: { opacity: 1, scale: 1, y: 0, transition: cfg.transition },
|
|
37
|
+
exit: { opacity: 0, scale: 0.96, y: -4, transition: cfg.transition },
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=motion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../src/MainSidebar/motion.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,cAAc,GAAkD;IAC3E,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;KACxD;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;KACzD;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;KACvE;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,MAA+B,EAC/B,QAA0B;IAE1B,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO;QACL,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC/C,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;QACzD,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;KACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA+B;IAC1D,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO;QACL,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;QACvB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;QACnD,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA+B;IAC3D,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO;QACL,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;QAC3C,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;QACnE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;KACrE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared rail — the fixed icon strip on the side. Used by all five variants.
|
|
3
|
+
*/
|
|
4
|
+
import { type ReactNode } from 'react';
|
|
5
|
+
import type { MainSidebarDensity, MainSidebarItem, MainSidebarSide } from './types.js';
|
|
6
|
+
interface RailProps {
|
|
7
|
+
items: MainSidebarItem[];
|
|
8
|
+
activeKey: string | undefined;
|
|
9
|
+
density?: MainSidebarDensity;
|
|
10
|
+
side?: MainSidebarSide;
|
|
11
|
+
header?: ReactNode;
|
|
12
|
+
footer?: ReactNode;
|
|
13
|
+
itemClassName: string | undefined;
|
|
14
|
+
activeItemClassName: string | undefined;
|
|
15
|
+
className: string | undefined;
|
|
16
|
+
onItemSelect: (item: MainSidebarItem) => void;
|
|
17
|
+
/** Item key whose panel is currently visible (for aria-expanded). */
|
|
18
|
+
openPanelKey: string | undefined;
|
|
19
|
+
/** Used for the toggle button aria-label. */
|
|
20
|
+
ariaLabel?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare const Rail: import("react").ForwardRefExoticComponent<RailProps & import("react").RefAttributes<HTMLElement>>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=rail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rail.d.ts","sourceRoot":"","sources":["../../src/MainSidebar/rail.tsx"],"names":[],"mappings":"AAEA;;GAEG;AACH,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAYpB,UAAU,SAAS;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,YAAY,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,qEAAqE;IACrE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,IAAI,mGA8Ff,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Shared rail — the fixed icon strip on the side. Used by all five variants.
|
|
5
|
+
*/
|
|
6
|
+
import { forwardRef } from 'react';
|
|
7
|
+
import { cn } from '../internal/cn.js';
|
|
8
|
+
import { Tooltip } from '../Tooltip.js';
|
|
9
|
+
import { isOnPath, shouldWrapBadge } from './helpers.js';
|
|
10
|
+
const RAIL_WIDTH = {
|
|
11
|
+
compact: 'w-12',
|
|
12
|
+
comfortable: 'w-[3.5rem]',
|
|
13
|
+
};
|
|
14
|
+
const RAIL_BUTTON = {
|
|
15
|
+
compact: 'h-12 w-full',
|
|
16
|
+
comfortable: 'h-14 w-full',
|
|
17
|
+
};
|
|
18
|
+
export const Rail = forwardRef(function Rail({ items, activeKey, density = 'comfortable', side = 'left', header, footer, itemClassName, activeItemClassName, className, onItemSelect, openPanelKey, ariaLabel = 'Main navigation', }, ref) {
|
|
19
|
+
const railWidth = RAIL_WIDTH[density];
|
|
20
|
+
const buttonSize = RAIL_BUTTON[density];
|
|
21
|
+
return (_jsxs("nav", { ref: ref, "aria-label": ariaLabel, className: cn('relative z-20 flex h-full shrink-0 flex-col items-stretch bg-primary text-primary-foreground', railWidth, side === 'right' ? 'border-l border-primary-700/40' : 'border-r border-primary-700/40', className), children: [header ? _jsx("div", { className: "flex w-full items-center justify-center", children: header }) : null, _jsx("div", { className: "flex w-full flex-col items-stretch", children: items.map((item) => {
|
|
22
|
+
/* Highlight the rail icon when the active leaf is anywhere in this item's subtree. */
|
|
23
|
+
const isActive = isOnPath(item, activeKey);
|
|
24
|
+
const isOpen = openPanelKey === item.key;
|
|
25
|
+
const tooltipSide = side === 'right' ? 'left' : 'right';
|
|
26
|
+
return (_jsx(Tooltip, { content: item.label, side: tooltipSide, delayMs: 80, className: "flex w-full", children: _jsxs("button", { type: "button", "data-item-key": item.key, disabled: item.disabled, "aria-current": isActive ? 'page' : undefined, "aria-expanded": isOpen, "aria-haspopup": item.children?.length || item.panel ? 'menu' : undefined, "aria-label": item.label, onClick: () => onItemSelect(item), className: cn('relative grid place-items-center transition-colors outline-none', 'focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-foreground/60', buttonSize, 'text-primary-foreground/85 hover:bg-primary-foreground/10 hover:text-primary-foreground', 'disabled:cursor-not-allowed disabled:opacity-40', isActive && 'bg-accent text-accent-foreground hover:bg-accent', isActive && activeItemClassName, itemClassName), children: [_jsx("span", { className: "grid size-[18px] place-items-center [&_svg]:size-full", "aria-hidden": "true", children: item.icon }), _jsx("span", { className: "sr-only", children: item.label }), item.badge != null && item.badge !== false ? (shouldWrapBadge(item.badge) ? (_jsx("span", { "aria-hidden": "true", className: "pointer-events-none absolute right-1 top-1 grid h-4 min-w-4 place-items-center rounded-full bg-destructive px-1 text-[10px] font-semibold text-destructive-foreground", children: item.badge })) : (_jsx("span", { "aria-hidden": "true", className: "pointer-events-none absolute right-1 top-1", children: item.badge }))) : null] }) }, item.key));
|
|
27
|
+
}) }), footer ? (_jsx("div", { className: "mt-auto flex w-full items-center justify-center", children: footer })) : null] }));
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=rail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rail.js","sourceRoot":"","sources":["../../src/MainSidebar/rail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface MenuSearchProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onValueChange: (next: string) => void;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
/** Auto-focus on mount — useful for command variant. */
|
|
7
|
+
autoFocus?: boolean;
|
|
8
|
+
/** Aria label for the input. Defaults to the placeholder. */
|
|
9
|
+
ariaLabel?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Visual tone. `light` (default) renders the input on neutral panel
|
|
12
|
+
* backgrounds. `onBrand` renders a semi-transparent input legible on the
|
|
13
|
+
* brand-primary sidebar surface.
|
|
14
|
+
*/
|
|
15
|
+
tone?: 'light' | 'onBrand';
|
|
16
|
+
}
|
|
17
|
+
export declare const MenuSearch: import("react").ForwardRefExoticComponent<MenuSearchProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/MainSidebar/search.tsx"],"names":[],"mappings":"AASA,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5B;AAED,eAAO,MAAM,UAAU,8GAuDrB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Shared MenuSearch input used by all variants. Token-styled, accessible,
|
|
5
|
+
* with a clear affordance.
|
|
6
|
+
*/
|
|
7
|
+
import { forwardRef } from 'react';
|
|
8
|
+
import { cn } from '../internal/cn.js';
|
|
9
|
+
export const MenuSearch = forwardRef(function MenuSearch({ value, onValueChange, placeholder = 'Search menu…', className, autoFocus, ariaLabel, tone = 'light' }, ref) {
|
|
10
|
+
const onChange = (e) => onValueChange(e.target.value);
|
|
11
|
+
const onBrand = tone === 'onBrand';
|
|
12
|
+
return (_jsxs("div", { className: cn('relative flex w-full items-center', className), children: [_jsx(SearchIcon, { className: cn('pointer-events-none absolute left-2.5 size-4',
|
|
13
|
+
/*
|
|
14
|
+
* `onBrand` uses card-foreground tokens. Both the rail (bg-primary)
|
|
15
|
+
* and any drill panel (bg-card) have their *-foreground tokens
|
|
16
|
+
* overridden to the same scheme.fg via `colorScheme`, so the
|
|
17
|
+
* search adapts cleanly on every themed surface AND on the
|
|
18
|
+
* default-brand panel (where card-foreground is the page dark
|
|
19
|
+
* foreground over a white card → readable).
|
|
20
|
+
*/
|
|
21
|
+
onBrand ? 'text-card-foreground/60' : 'text-muted-foreground') }), _jsx("input", { ref: ref, type: "search", value: value, onChange: onChange, placeholder: placeholder, "aria-label": ariaLabel ?? placeholder, autoFocus: autoFocus, className: cn('h-9 w-full rounded-md pl-8 pr-8 text-sm', onBrand
|
|
22
|
+
? 'border border-card-foreground/20 bg-card-foreground/10 text-card-foreground placeholder:text-card-foreground/60 focus:outline-none focus:border-card-foreground/40 focus:ring-2 focus:ring-card-foreground/20'
|
|
23
|
+
: 'border border-border bg-background text-foreground shadow-mi-input placeholder:text-muted-foreground focus:outline-none focus:border-primary focus:ring-2 focus:ring-ring/30') }), value ? (_jsx("button", { type: "button", onClick: () => onValueChange(''), "aria-label": "Clear search", className: cn('absolute right-1 grid size-7 place-items-center rounded focus-visible:outline-none focus-visible:ring-2', onBrand
|
|
24
|
+
? 'text-card-foreground/60 hover:bg-card-foreground/10 hover:text-card-foreground focus-visible:ring-card-foreground/40'
|
|
25
|
+
: 'text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:ring-ring'), children: _jsx(ClearIcon, { className: "size-3.5" }) })) : null] }));
|
|
26
|
+
});
|
|
27
|
+
function SearchIcon({ className }) {
|
|
28
|
+
return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: className, "aria-hidden": "true", children: [_jsx("circle", { cx: "11", cy: "11", r: "7" }), _jsx("path", { d: "m20 20-3.5-3.5", strokeLinecap: "round" })] }));
|
|
29
|
+
}
|
|
30
|
+
function ClearIcon({ className }) {
|
|
31
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: className, "aria-hidden": "true", children: _jsx("path", { d: "M6 6l12 12M18 6 6 18", strokeLinecap: "round" }) }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/MainSidebar/search.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;GAGG;AACH,OAAO,EAAE,UAAU,EAA2B,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAmBvC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAoC,SAAS,UAAU,CACzF,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,GAAG,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,EAAE,EACvG,GAAG;IAEH,MAAM,QAAQ,GAAyC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,CAAC;IAEnC,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,aAChE,KAAC,UAAU,IACT,SAAS,EAAE,EAAE,CACX,8CAA8C;gBAC9C;;;;;;;mBAOG;gBACH,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAC9D,GACD,EACF,gBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,gBACZ,SAAS,IAAI,WAAW,EACpC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,EAAE,CACX,yCAAyC,EACzC,OAAO;oBACL,CAAC,CAAC,+MAA+M;oBACjN,CAAC,CAAC,8KAA8K,CACnL,GACD,EACD,KAAK,CAAC,CAAC,CAAC,CACP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,gBACrB,cAAc,EACzB,SAAS,EAAE,EAAE,CACX,yGAAyG,EACzG,OAAO;oBACL,CAAC,CAAC,sHAAsH;oBACxH,CAAC,CAAC,oFAAoF,CACzF,YAED,KAAC,SAAS,IAAC,SAAS,EAAC,UAAU,GAAG,GAC3B,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,EAAE,SAAS,EAA0B;IACvD,OAAO,CACL,eAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,SAAS,EAAE,SAAS,iBAAc,MAAM,aACjH,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,GAAG,EAChC,eAAM,CAAC,EAAC,gBAAgB,EAAC,aAAa,EAAC,OAAO,GAAG,IAC7C,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAA0B;IACtD,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,SAAS,EAAE,SAAS,iBAAc,MAAM,YACjH,eAAM,CAAC,EAAC,sBAAsB,EAAC,aAAa,EAAC,OAAO,GAAG,GACnD,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for `MainSidebar` and its five variants.
|
|
3
|
+
*/
|
|
4
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
5
|
+
export interface MainSidebarItem {
|
|
6
|
+
key: string;
|
|
7
|
+
icon?: ReactNode;
|
|
8
|
+
label: string;
|
|
9
|
+
href?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
badge?: ReactNode;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
children?: MainSidebarItem[];
|
|
14
|
+
/** Override the auto-rendered child list with a custom panel. */
|
|
15
|
+
panel?: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export type MainSidebarVariant = 'drilldown' | 'floating' | 'columns' | 'command' | 'hover';
|
|
18
|
+
export type MainSidebarSide = 'left' | 'right';
|
|
19
|
+
export type MainSidebarDensity = 'compact' | 'comfortable';
|
|
20
|
+
export type MainSidebarCollapsible = 'icon' | 'none';
|
|
21
|
+
export type MainSidebarMotionPreset = 'subtle' | 'standard' | 'expressive';
|
|
22
|
+
/**
|
|
23
|
+
* Per-instance colour overrides. Each token is optional and applies via a
|
|
24
|
+
* scoped CSS-variable override on the sidebar root, so the rest of the
|
|
25
|
+
* page is unaffected. Omitted tokens fall back to the design-system brand
|
|
26
|
+
* defaults. Structure mirrors shadcn's sidebar token taxonomy
|
|
27
|
+
* (`--sidebar-background`, `--sidebar-accent`, etc.).
|
|
28
|
+
*
|
|
29
|
+
* ### Quick-set shorthands
|
|
30
|
+
*
|
|
31
|
+
* | Token | Default | Sets |
|
|
32
|
+
* |---|---|---|
|
|
33
|
+
* | `bg` | `var(--color-primary)` | Both `railBg` AND `panelBg` |
|
|
34
|
+
* | `fg` | `var(--color-primary-foreground)` | Both `railFg` AND `panelFg` |
|
|
35
|
+
*
|
|
36
|
+
* ### Granular tokens (override individual surfaces)
|
|
37
|
+
*
|
|
38
|
+
* | Token | Default | Applies to |
|
|
39
|
+
* |---|---|---|
|
|
40
|
+
* | `railBg` | `var(--color-primary)` | Icon rail + wide expanded sidebar background |
|
|
41
|
+
* | `railFg` | `var(--color-primary-foreground)` | Icon rail + expanded text and icons |
|
|
42
|
+
* | `panelBg` | `var(--color-card)` | Drill/floating/columns/command/hover panel surface |
|
|
43
|
+
* | `panelFg` | `var(--color-card-foreground)` | Panel titles, item text, icons |
|
|
44
|
+
* | `accentBg` | `var(--color-accent)` | Active item background (rail + panel + expanded) |
|
|
45
|
+
* | `accentFg` | `var(--color-accent-foreground)` | Active item text |
|
|
46
|
+
* | `border` | `var(--color-border)` | All internal dividers + outer rail border |
|
|
47
|
+
* | `mutedFg` | `text-card-foreground/70` | Descriptions, breadcrumb crumbs, icon hints |
|
|
48
|
+
* | `hoverBg` | `card-foreground/10` | Hover overlay on every interactive row |
|
|
49
|
+
* | `ring` | `var(--color-ring)` | Focus ring on every interactive row |
|
|
50
|
+
* | `tooltipBg` | `var(--color-foreground)` | Rail-icon hover tooltip surface |
|
|
51
|
+
* | `tooltipFg` | `var(--color-background)` | Rail-icon hover tooltip text |
|
|
52
|
+
*
|
|
53
|
+
* Example — fully bespoke whitelabel:
|
|
54
|
+
*
|
|
55
|
+
* ```tsx
|
|
56
|
+
* <MainSidebar
|
|
57
|
+
* colorScheme={{
|
|
58
|
+
* railBg: '#0a2540', railFg: '#ffffff',
|
|
59
|
+
* panelBg: '#11304b', panelFg: '#ffffff',
|
|
60
|
+
* accentBg: '#ff5a1f', accentFg: '#ffffff',
|
|
61
|
+
* mutedFg: 'rgb(255 255 255 / 0.6)',
|
|
62
|
+
* hoverBg: 'rgb(255 255 255 / 0.08)',
|
|
63
|
+
* border: 'rgb(255 255 255 / 0.16)',
|
|
64
|
+
* ring: '#ff5a1f',
|
|
65
|
+
* tooltipBg: '#ffffff', tooltipFg: '#0a2540',
|
|
66
|
+
* }}
|
|
67
|
+
* />
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export interface MainSidebarColorScheme {
|
|
71
|
+
bg?: string;
|
|
72
|
+
fg?: string;
|
|
73
|
+
railBg?: string;
|
|
74
|
+
railFg?: string;
|
|
75
|
+
panelBg?: string;
|
|
76
|
+
panelFg?: string;
|
|
77
|
+
accentBg?: string;
|
|
78
|
+
accentFg?: string;
|
|
79
|
+
border?: string;
|
|
80
|
+
mutedFg?: string;
|
|
81
|
+
hoverBg?: string;
|
|
82
|
+
ring?: string;
|
|
83
|
+
tooltipBg?: string;
|
|
84
|
+
tooltipFg?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface MainSidebarSearchConfig {
|
|
87
|
+
placeholder?: string;
|
|
88
|
+
/** Custom predicate; defaults to case-insensitive `item.label` match. */
|
|
89
|
+
matcher?: (item: MainSidebarItem, query: string) => boolean;
|
|
90
|
+
/** Shown when nothing matches. Default: "No menu items match {query}". */
|
|
91
|
+
noResultsLabel?: ReactNode;
|
|
92
|
+
}
|
|
93
|
+
export interface MainSidebarProps extends Omit<HTMLAttributes<HTMLElement>, 'onSelect'> {
|
|
94
|
+
items: MainSidebarItem[];
|
|
95
|
+
/** Interaction model. Defaults to `drilldown` (backward-compatible). */
|
|
96
|
+
variant?: MainSidebarVariant;
|
|
97
|
+
activeKey?: string;
|
|
98
|
+
expanded?: boolean;
|
|
99
|
+
defaultExpanded?: boolean;
|
|
100
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
101
|
+
onItemSelect?: (key: string, item: MainSidebarItem) => void;
|
|
102
|
+
header?: ReactNode;
|
|
103
|
+
footer?: ReactNode;
|
|
104
|
+
panelHeader?: ReactNode;
|
|
105
|
+
panelFooter?: ReactNode;
|
|
106
|
+
search?: boolean | MainSidebarSearchConfig;
|
|
107
|
+
searchPlaceholder?: string;
|
|
108
|
+
onSearchChange?: (query: string) => void;
|
|
109
|
+
side?: MainSidebarSide;
|
|
110
|
+
density?: MainSidebarDensity;
|
|
111
|
+
panelWidth?: number | string;
|
|
112
|
+
motionPreset?: MainSidebarMotionPreset;
|
|
113
|
+
showLabelsWhenExpanded?: boolean;
|
|
114
|
+
collapsible?: MainSidebarCollapsible;
|
|
115
|
+
collapsed?: boolean;
|
|
116
|
+
defaultCollapsed?: boolean;
|
|
117
|
+
onCollapsedChange?: (collapsed: boolean) => void;
|
|
118
|
+
collapsedWidth?: number | string;
|
|
119
|
+
expandedWidth?: number | string;
|
|
120
|
+
showCollapseToggle?: boolean;
|
|
121
|
+
/** Dismiss the panel when a pointer-down lands outside the rail + panel. Default true (all overlay variants). */
|
|
122
|
+
closeOnOutsideClick?: boolean;
|
|
123
|
+
/** Columns: how many columns can be visible at once before horizontal scroll. */
|
|
124
|
+
columnsMaxVisible?: number;
|
|
125
|
+
/** Hover: open delay in milliseconds. Default 120. */
|
|
126
|
+
hoverDelayMs?: number;
|
|
127
|
+
railClassName?: string;
|
|
128
|
+
panelClassName?: string;
|
|
129
|
+
itemClassName?: string;
|
|
130
|
+
activeItemClassName?: string;
|
|
131
|
+
/**
|
|
132
|
+
* Whitelabel colour scheme. Any subset of these tokens overrides the
|
|
133
|
+
* sidebar's surface, accent, border and tooltip colours per-instance —
|
|
134
|
+
* the values are emitted as CSS variables on the sidebar root so they
|
|
135
|
+
* cascade through every nested affordance (rail, expanded surface,
|
|
136
|
+
* tooltips, badges, breadcrumbs).
|
|
137
|
+
*
|
|
138
|
+
* <MainSidebar
|
|
139
|
+
* colorScheme={{
|
|
140
|
+
* bg: '#0a2540',
|
|
141
|
+
* fg: '#ffffff',
|
|
142
|
+
* accentBg: '#ff5a1f',
|
|
143
|
+
* accentFg: '#ffffff',
|
|
144
|
+
* border: 'rgb(255 255 255 / 0.12)',
|
|
145
|
+
* }}
|
|
146
|
+
* />
|
|
147
|
+
*
|
|
148
|
+
* Any token may be omitted; omitted tokens fall back to the design
|
|
149
|
+
* system's brand defaults (primary / accent / border).
|
|
150
|
+
*/
|
|
151
|
+
colorScheme?: MainSidebarColorScheme;
|
|
152
|
+
collapsedLabel?: string;
|
|
153
|
+
expandedLabel?: string;
|
|
154
|
+
backLabel?: string;
|
|
155
|
+
/** Force the mobile bottom-sheet layout for previews/tests. */
|
|
156
|
+
mobile?: boolean;
|
|
157
|
+
}
|
|
158
|
+
/** Backward-compat aliases — IconSidebar was the original name. */
|
|
159
|
+
export type IconSidebarItem = MainSidebarItem;
|
|
160
|
+
export type IconSidebarProps = MainSidebarProps;
|
|
161
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/MainSidebar/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/MainSidebar/types.ts"],"names":[],"mappings":""}
|
package/dist/MainSidebar.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Public barrel for `@mihcm/ui/MainSidebar`. The implementation is split
|
|
3
|
+
* across `./MainSidebar/*` so each variant stays under the 400-line rule
|
|
4
|
+
* (CLAUDE.md §6).
|
|
5
|
+
*/
|
|
6
|
+
export { IconSidebar, MainSidebar, type IconSidebarItem, type IconSidebarProps, type MainSidebarDensity, type MainSidebarItem, type MainSidebarMotionPreset, type MainSidebarProps, type MainSidebarSearchConfig, type MainSidebarSide, type MainSidebarVariant, } from './MainSidebar/index.js';
|
|
2
7
|
//# sourceMappingURL=MainSidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainSidebar.d.ts","sourceRoot":"","sources":["../src/MainSidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"MainSidebar.d.ts","sourceRoot":"","sources":["../src/MainSidebar.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC"}
|
package/dist/MainSidebar.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Public barrel for `@mihcm/ui/MainSidebar`. The implementation is split
|
|
4
|
+
* across `./MainSidebar/*` so each variant stays under the 400-line rule
|
|
5
|
+
* (CLAUDE.md §6).
|
|
6
|
+
*/
|
|
7
|
+
export { IconSidebar, MainSidebar, } from './MainSidebar/index.js';
|
|
3
8
|
//# sourceMappingURL=MainSidebar.js.map
|
package/dist/MainSidebar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainSidebar.js","sourceRoot":"","sources":["../src/MainSidebar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EACL,WAAW,EACX,WAAW,
|
|
1
|
+
{"version":3,"file":"MainSidebar.js","sourceRoot":"","sources":["../src/MainSidebar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,WAAW,GAUZ,MAAM,wBAAwB,CAAC"}
|
package/dist/NavigationMenu.js
CHANGED
|
@@ -44,7 +44,7 @@ const navigationMenuTriggerStyle = cva('group inline-flex h-10 w-max items-cente
|
|
|
44
44
|
'data-[state=open]:bg-muted/50 data-[active]:bg-muted/50');
|
|
45
45
|
export { navigationMenuTriggerStyle };
|
|
46
46
|
export const NavigationMenuTrigger = forwardRef(function NavigationMenuTrigger({ className, children, ...props }, ref) {
|
|
47
|
-
return (_jsxs(NavigationMenuPrimitive.Trigger, { ref: ref, className: cn(navigationMenuTriggerStyle(), 'group', className), ...props, children: [children, ' ', _jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: 2, className: "relative top-px ml-1 h-3 w-3 transition-transform duration-200 group-data-[state=open]:rotate-180", "aria-hidden": true, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6l4 4 4-4" }) })] }));
|
|
47
|
+
return (_jsxs(NavigationMenuPrimitive.Trigger, { ref: ref, className: cn(navigationMenuTriggerStyle(), 'group', className), ...props, children: [children, ' ', _jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: 2, className: "relative top-px ml-1 h-3 w-3 transition-transform duration-200 group-data-[state=open]:rotate-180", "aria-hidden": "true", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6l4 4 4-4" }) })] }));
|
|
48
48
|
});
|
|
49
49
|
/* ── Content ──────────────────────────────────────────────────────── */
|
|
50
50
|
export const NavigationMenuContent = forwardRef(function NavigationMenuContent({ className, ...props }, ref) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationMenu.js","sourceRoot":"","sources":["../src/NavigationMenu.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,UAAU,EAAkD,MAAM,OAAO,CAAC;AACnF,OAAO,KAAK,uBAAuB,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,0EAA0E;AAE1E,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC,SAAS,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC9D,OAAO,CACL,MAAC,uBAAuB,CAAC,IAAI,IAC3B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,iEAAiE,EACjE,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,KAAC,sBAAsB,KAAG,IACG,CAChC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,0EAA0E;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAG1C,SAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IACxD,OAAO,CACL,KAAC,uBAAuB,CAAC,IAAI,IAC3B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,0EAA0E;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAE/D,yEAAyE;AAEzE,MAAM,0BAA0B,GAAG,GAAG,CACpC,wHAAwH;IACtH,oBAAoB;IACpB,uCAAuC;IACvC,0DAA0D;IAC1D,mDAAmD;IACnD,yDAAyD,CAC5D,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAG7C,SAAS,qBAAqB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IACrE,OAAO,CACL,MAAC,uBAAuB,CAAC,OAAO,IAC9B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,KAC3D,KAAK,aAER,QAAQ,EAAE,GAAG,EACd,cACE,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,EACd,SAAS,EAAC,mGAAmG,
|
|
1
|
+
{"version":3,"file":"NavigationMenu.js","sourceRoot":"","sources":["../src/NavigationMenu.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,UAAU,EAAkD,MAAM,OAAO,CAAC;AACnF,OAAO,KAAK,uBAAuB,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,0EAA0E;AAE1E,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC,SAAS,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC9D,OAAO,CACL,MAAC,uBAAuB,CAAC,IAAI,IAC3B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,iEAAiE,EACjE,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,KAAC,sBAAsB,KAAG,IACG,CAChC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,0EAA0E;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAG1C,SAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IACxD,OAAO,CACL,KAAC,uBAAuB,CAAC,IAAI,IAC3B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,0EAA0E;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAE/D,yEAAyE;AAEzE,MAAM,0BAA0B,GAAG,GAAG,CACpC,wHAAwH;IACtH,oBAAoB;IACpB,uCAAuC;IACvC,0DAA0D;IAC1D,mDAAmD;IACnD,yDAAyD,CAC5D,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAG7C,SAAS,qBAAqB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IACrE,OAAO,CACL,MAAC,uBAAuB,CAAC,OAAO,IAC9B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,KAC3D,KAAK,aAER,QAAQ,EAAE,GAAG,EACd,cACE,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,EACd,SAAS,EAAC,mGAAmG,iBACjG,MAAM,YAElB,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,cAAc,GAAG,GAClE,IAC0B,CACnC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,yEAAyE;AAEzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAG7C,SAAS,qBAAqB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC3D,OAAO,CACL,KAAC,uBAAuB,CAAC,OAAO,IAC9B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oFAAoF,EACpF,0DAA0D,EAC1D,8FAA8F,EAC9F,wFAAwF,EACxF,uBAAuB,EACvB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,0EAA0E;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAE/D,yEAAyE;AAEzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAG9C,SAAS,sBAAsB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC5D,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,8CAA8C,CAAC,YAChE,KAAC,uBAAuB,CAAC,QAAQ,IAC/B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oFAAoF,EACpF,+FAA+F,EAC/F,8DAA8D,EAC9D,8DAA8D,EAC9D,oDAAoD,EACpD,SAAS,CACV,KACG,KAAK,GACT,GACE,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,yEAAyE;AAEzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAG/C,SAAS,uBAAuB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC7D,OAAO,CACL,KAAC,uBAAuB,CAAC,SAAS,IAChC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,iEAAiE,EACjE,2DAA2D,EAC3D,SAAS,CACV,KACG,KAAK,YAET,cAAK,SAAS,EAAC,wEAAwE,GAAG,GACxD,CACrC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme + variant config for RichTextEditor.
|
|
3
|
+
*
|
|
4
|
+
* `editorTheme` maps Lexical's internal class names to MiHCM Tailwind tokens
|
|
5
|
+
* so the editor body matches the rest of the design system in light/dark.
|
|
6
|
+
*/
|
|
7
|
+
export type RichTextEditorVariant = 'minimal' | 'default' | 'semi' | 'full';
|
|
8
|
+
export declare const editorTheme: {
|
|
9
|
+
paragraph: string;
|
|
10
|
+
heading: {
|
|
11
|
+
h1: string;
|
|
12
|
+
h2: string;
|
|
13
|
+
h3: string;
|
|
14
|
+
};
|
|
15
|
+
text: {
|
|
16
|
+
bold: string;
|
|
17
|
+
italic: string;
|
|
18
|
+
underline: string;
|
|
19
|
+
strikethrough: string;
|
|
20
|
+
underlineStrikethrough: string;
|
|
21
|
+
code: string;
|
|
22
|
+
subscript: string;
|
|
23
|
+
superscript: string;
|
|
24
|
+
};
|
|
25
|
+
list: {
|
|
26
|
+
ul: string;
|
|
27
|
+
ol: string;
|
|
28
|
+
listitem: string;
|
|
29
|
+
listitemChecked: string;
|
|
30
|
+
listitemUnchecked: string;
|
|
31
|
+
nested: {
|
|
32
|
+
listitem: string;
|
|
33
|
+
};
|
|
34
|
+
checklist: string;
|
|
35
|
+
};
|
|
36
|
+
link: string;
|
|
37
|
+
quote: string;
|
|
38
|
+
code: string;
|
|
39
|
+
horizontalRule: string;
|
|
40
|
+
table: string;
|
|
41
|
+
tableCell: string;
|
|
42
|
+
tableCellHeader: string;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/RichTextEditor/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5E,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCvB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme + variant config for RichTextEditor.
|
|
3
|
+
*
|
|
4
|
+
* `editorTheme` maps Lexical's internal class names to MiHCM Tailwind tokens
|
|
5
|
+
* so the editor body matches the rest of the design system in light/dark.
|
|
6
|
+
*/
|
|
7
|
+
export const editorTheme = {
|
|
8
|
+
paragraph: 'mb-2 last:mb-0',
|
|
9
|
+
heading: {
|
|
10
|
+
h1: 'text-2xl font-bold mb-3 text-foreground',
|
|
11
|
+
h2: 'text-xl font-semibold mb-2 text-foreground',
|
|
12
|
+
h3: 'text-lg font-medium mb-2 text-foreground',
|
|
13
|
+
},
|
|
14
|
+
text: {
|
|
15
|
+
bold: 'font-bold',
|
|
16
|
+
italic: 'italic',
|
|
17
|
+
underline: 'underline',
|
|
18
|
+
strikethrough: 'line-through',
|
|
19
|
+
underlineStrikethrough: 'underline line-through',
|
|
20
|
+
code: 'font-mono text-sm bg-muted px-1.5 py-0.5 rounded',
|
|
21
|
+
subscript: 'align-sub',
|
|
22
|
+
superscript: 'align-super',
|
|
23
|
+
},
|
|
24
|
+
list: {
|
|
25
|
+
ul: 'list-disc ml-6 mb-2',
|
|
26
|
+
ol: 'list-decimal ml-6 mb-2',
|
|
27
|
+
listitem: 'mb-0.5',
|
|
28
|
+
listitemChecked: 'line-through opacity-60 relative ml-2 list-none outline-none',
|
|
29
|
+
listitemUnchecked: 'relative ml-2 list-none outline-none',
|
|
30
|
+
nested: { listitem: 'list-none' },
|
|
31
|
+
checklist: 'list-none ml-0',
|
|
32
|
+
},
|
|
33
|
+
link: 'text-primary underline cursor-pointer hover:text-primary/80',
|
|
34
|
+
quote: 'border-l-4 border-primary-200 dark:border-primary-800 pl-4 italic text-muted-foreground mb-2',
|
|
35
|
+
code: 'font-mono text-sm bg-muted p-3 rounded-md mb-2 block overflow-x-auto',
|
|
36
|
+
horizontalRule: 'my-4 border-t border-border',
|
|
37
|
+
table: 'border-collapse border border-border w-full mb-2',
|
|
38
|
+
tableCell: 'border border-border px-2 py-1.5 text-sm min-w-[75px]',
|
|
39
|
+
tableCellHeader: 'border border-border px-2 py-1.5 text-sm font-semibold bg-muted/50',
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/RichTextEditor/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE;QACP,EAAE,EAAE,yCAAyC;QAC7C,EAAE,EAAE,4CAA4C;QAChD,EAAE,EAAE,0CAA0C;KAC/C;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,WAAW;QACtB,aAAa,EAAE,cAAc;QAC7B,sBAAsB,EAAE,wBAAwB;QAChD,IAAI,EAAE,kDAAkD;QACxD,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,aAAa;KAC3B;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,qBAAqB;QACzB,EAAE,EAAE,wBAAwB;QAC5B,QAAQ,EAAE,QAAQ;QAClB,eAAe,EAAE,8DAA8D;QAC/E,iBAAiB,EAAE,sCAAsC;QACzD,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE;QACjC,SAAS,EAAE,gBAAgB;KAC5B;IACD,IAAI,EAAE,6DAA6D;IACnE,KAAK,EAAE,8FAA8F;IACrG,IAAI,EAAE,sEAAsE;IAC5E,cAAc,EAAE,6BAA6B;IAC7C,KAAK,EAAE,kDAAkD;IACzD,SAAS,EAAE,uDAAuD;IAClE,eAAe,EAAE,oEAAoE;CACtF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny presentational primitives for the RichTextEditor toolbar — kept local
|
|
3
|
+
* so the editor doesn't pull in a full icon set for ~30 glyphs.
|
|
4
|
+
*/
|
|
5
|
+
import { type ReactNode } from 'react';
|
|
6
|
+
export declare function TbIcon({ d, className }: {
|
|
7
|
+
d: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function TbMultiIcon({ paths, className }: {
|
|
11
|
+
paths: string[];
|
|
12
|
+
className?: string;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function TbBtn({ active, onClick, title, children }: {
|
|
15
|
+
active?: boolean;
|
|
16
|
+
onClick: () => void;
|
|
17
|
+
title: string;
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function TbSep(): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=toolbar-icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar-icons.d.ts","sourceRoot":"","sources":["../../src/RichTextEditor/toolbar-icons.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,wBAAgB,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAMzE;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAMxF;AAED,wBAAgB,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAUxI;AAED,wBAAgB,KAAK,4CAEpB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Tiny presentational primitives for the RichTextEditor toolbar — kept local
|
|
5
|
+
* so the editor doesn't pull in a full icon set for ~30 glyphs.
|
|
6
|
+
*/
|
|
7
|
+
import {} from 'react';
|
|
8
|
+
import { cn } from '../internal/cn.js';
|
|
9
|
+
export function TbIcon({ d, className }) {
|
|
10
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: cn('size-3.5', className), children: _jsx("path", { d: d }) }));
|
|
11
|
+
}
|
|
12
|
+
export function TbMultiIcon({ paths, className }) {
|
|
13
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: cn('size-3.5', className), children: paths.map((d, i) => _jsx("path", { d: d }, i)) }));
|
|
14
|
+
}
|
|
15
|
+
export function TbBtn({ active, onClick, title, children }) {
|
|
16
|
+
return (_jsx("button", { type: "button", onClick: onClick, title: title, "aria-label": title, "aria-pressed": active, className: cn('flex items-center justify-center size-7 rounded transition-colors duration-150 cursor-pointer', 'hover:bg-muted focus:outline-none focus-visible:ring-2 focus-visible:ring-ring', active && 'border border-primary bg-primary text-primary-foreground shadow-mi-card'), children: children }));
|
|
17
|
+
}
|
|
18
|
+
export function TbSep() {
|
|
19
|
+
return _jsx("span", { className: "w-px h-4 bg-border mx-0.5", "aria-hidden": "true" });
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=toolbar-icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar-icons.js","sourceRoot":"","sources":["../../src/RichTextEditor/toolbar-icons.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;GAGG;AACH,OAAO,EAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,UAAU,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAqC;IACxE,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,YAC1J,eAAM,CAAC,EAAE,CAAC,GAAI,GACV,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAA2C;IACvF,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,YACzJ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAc,CAAC,EAAE,CAAC,IAAP,CAAC,CAAU,CAAC,GACxC,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAiF;IACvI,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,gBAAc,KAAK,kBAAgB,MAAM,EAAE,SAAS,EAAE,EAAE,CAC1G,+FAA+F,EAC/F,gFAAgF,EAChF,MAAM,IAAI,yEAAyE,CACpF,YACE,QAAQ,GACF,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,GAAG,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/RichTextEditor/toolbar.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,qBAAqB,CAAA;CAAE,2CAgP5E"}
|