@douglasneuroinformatics/libui 6.2.1 → 6.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 (112) hide show
  1. package/dist/components/ComboBox/ComboBox.d.ts +27 -0
  2. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -0
  3. package/dist/components/ComboBox/ComboBox.js +37 -0
  4. package/dist/components/ComboBox/ComboBox.js.map +1 -0
  5. package/dist/components/ComboBox/ComboBoxChips.d.ts +9 -0
  6. package/dist/components/ComboBox/ComboBoxChips.d.ts.map +1 -0
  7. package/dist/components/ComboBox/ComboBoxChips.js +17 -0
  8. package/dist/components/ComboBox/ComboBoxChips.js.map +1 -0
  9. package/dist/components/ComboBox/ComboBoxClear.d.ts +4 -0
  10. package/dist/components/ComboBox/ComboBoxClear.d.ts.map +1 -0
  11. package/dist/components/ComboBox/ComboBoxClear.js +10 -0
  12. package/dist/components/ComboBox/ComboBoxClear.js.map +1 -0
  13. package/dist/components/ComboBox/ComboBoxCollection.d.ts +4 -0
  14. package/dist/components/ComboBox/ComboBoxCollection.d.ts.map +1 -0
  15. package/dist/components/ComboBox/ComboBoxCollection.js +7 -0
  16. package/dist/components/ComboBox/ComboBoxCollection.js.map +1 -0
  17. package/dist/components/ComboBox/ComboBoxContent.d.ts +4 -0
  18. package/dist/components/ComboBox/ComboBoxContent.d.ts.map +1 -0
  19. package/dist/components/ComboBox/ComboBoxContent.js +8 -0
  20. package/dist/components/ComboBox/ComboBoxContent.js.map +1 -0
  21. package/dist/components/ComboBox/ComboBoxEmpty.d.ts +4 -0
  22. package/dist/components/ComboBox/ComboBoxEmpty.d.ts.map +1 -0
  23. package/dist/components/ComboBox/ComboBoxEmpty.js +8 -0
  24. package/dist/components/ComboBox/ComboBoxEmpty.js.map +1 -0
  25. package/dist/components/ComboBox/ComboBoxGroup.d.ts +4 -0
  26. package/dist/components/ComboBox/ComboBoxGroup.d.ts.map +1 -0
  27. package/dist/components/ComboBox/ComboBoxGroup.js +8 -0
  28. package/dist/components/ComboBox/ComboBoxGroup.js.map +1 -0
  29. package/dist/components/ComboBox/ComboBoxInput.d.ts +7 -0
  30. package/dist/components/ComboBox/ComboBoxInput.d.ts.map +1 -0
  31. package/dist/components/ComboBox/ComboBoxInput.js +17 -0
  32. package/dist/components/ComboBox/ComboBoxInput.js.map +1 -0
  33. package/dist/components/ComboBox/ComboBoxItem.d.ts +4 -0
  34. package/dist/components/ComboBox/ComboBoxItem.d.ts.map +1 -0
  35. package/dist/components/ComboBox/ComboBoxItem.js +9 -0
  36. package/dist/components/ComboBox/ComboBoxItem.js.map +1 -0
  37. package/dist/components/ComboBox/ComboBoxLabel.d.ts +4 -0
  38. package/dist/components/ComboBox/ComboBoxLabel.d.ts.map +1 -0
  39. package/dist/components/ComboBox/ComboBoxLabel.js +8 -0
  40. package/dist/components/ComboBox/ComboBoxLabel.js.map +1 -0
  41. package/dist/components/ComboBox/ComboBoxList.d.ts +4 -0
  42. package/dist/components/ComboBox/ComboBoxList.d.ts.map +1 -0
  43. package/dist/components/ComboBox/ComboBoxList.js +8 -0
  44. package/dist/components/ComboBox/ComboBoxList.js.map +1 -0
  45. package/dist/components/ComboBox/ComboBoxSeparator.d.ts +4 -0
  46. package/dist/components/ComboBox/ComboBoxSeparator.d.ts.map +1 -0
  47. package/dist/components/ComboBox/ComboBoxSeparator.js +8 -0
  48. package/dist/components/ComboBox/ComboBoxSeparator.js.map +1 -0
  49. package/dist/components/ComboBox/ComboBoxTrigger.d.ts +4 -0
  50. package/dist/components/ComboBox/ComboBoxTrigger.d.ts.map +1 -0
  51. package/dist/components/ComboBox/ComboBoxTrigger.js +9 -0
  52. package/dist/components/ComboBox/ComboBoxTrigger.js.map +1 -0
  53. package/dist/components/ComboBox/ComboBoxValue.d.ts +4 -0
  54. package/dist/components/ComboBox/ComboBoxValue.d.ts.map +1 -0
  55. package/dist/components/ComboBox/ComboBoxValue.js +7 -0
  56. package/dist/components/ComboBox/ComboBoxValue.js.map +1 -0
  57. package/dist/components/DataTable/DataTableBody.d.ts.map +1 -1
  58. package/dist/components/DataTable/DataTableBody.js +1 -1
  59. package/dist/components/DataTable/DataTableBody.js.map +1 -1
  60. package/dist/components/DataTable/DataTableHead.d.ts.map +1 -1
  61. package/dist/components/DataTable/DataTableHead.js +3 -3
  62. package/dist/components/DataTable/DataTableHead.js.map +1 -1
  63. package/dist/components/InputGroup/InputGroup.d.ts +4 -0
  64. package/dist/components/InputGroup/InputGroup.d.ts.map +1 -0
  65. package/dist/components/InputGroup/InputGroup.js +8 -0
  66. package/dist/components/InputGroup/InputGroup.js.map +1 -0
  67. package/dist/components/InputGroup/InputGroupAddon.d.ts +8 -0
  68. package/dist/components/InputGroup/InputGroupAddon.d.ts.map +1 -0
  69. package/dist/components/InputGroup/InputGroupAddon.js +23 -0
  70. package/dist/components/InputGroup/InputGroupAddon.js.map +1 -0
  71. package/dist/components/InputGroup/InputGroupButton.d.ts +9 -0
  72. package/dist/components/InputGroup/InputGroupButton.d.ts.map +1 -0
  73. package/dist/components/InputGroup/InputGroupButton.js +29 -0
  74. package/dist/components/InputGroup/InputGroupButton.js.map +1 -0
  75. package/dist/components/InputGroup/InputGroupInput.d.ts +4 -0
  76. package/dist/components/InputGroup/InputGroupInput.d.ts.map +1 -0
  77. package/dist/components/InputGroup/InputGroupInput.js +9 -0
  78. package/dist/components/InputGroup/InputGroupInput.js.map +1 -0
  79. package/dist/components/InputGroup/InputGroupText.d.ts +4 -0
  80. package/dist/components/InputGroup/InputGroupText.d.ts.map +1 -0
  81. package/dist/components/InputGroup/InputGroupText.js +8 -0
  82. package/dist/components/InputGroup/InputGroupText.js.map +1 -0
  83. package/dist/components/InputGroup/InputGroupTextArea.d.ts +4 -0
  84. package/dist/components/InputGroup/InputGroupTextArea.d.ts.map +1 -0
  85. package/dist/components/InputGroup/InputGroupTextArea.js +9 -0
  86. package/dist/components/InputGroup/InputGroupTextArea.js.map +1 -0
  87. package/package.json +2 -1
  88. package/src/components/ComboBox/ComboBox.stories.tsx +31 -0
  89. package/src/components/ComboBox/ComboBox.tsx +41 -0
  90. package/src/components/ComboBox/ComboBoxChips.tsx +69 -0
  91. package/src/components/ComboBox/ComboBoxClear.tsx +23 -0
  92. package/src/components/ComboBox/ComboBoxCollection.tsx +7 -0
  93. package/src/components/ComboBox/ComboBoxContent.tsx +39 -0
  94. package/src/components/ComboBox/ComboBoxEmpty.tsx +18 -0
  95. package/src/components/ComboBox/ComboBoxGroup.tsx +9 -0
  96. package/src/components/ComboBox/ComboBoxInput.tsx +51 -0
  97. package/src/components/ComboBox/ComboBoxItem.tsx +28 -0
  98. package/src/components/ComboBox/ComboBoxLabel.tsx +15 -0
  99. package/src/components/ComboBox/ComboBoxList.tsx +18 -0
  100. package/src/components/ComboBox/ComboBoxSeparator.tsx +15 -0
  101. package/src/components/ComboBox/ComboBoxTrigger.tsx +23 -0
  102. package/src/components/ComboBox/ComboBoxValue.tsx +7 -0
  103. package/src/components/DataTable/DataTable.stories.tsx +19 -1
  104. package/src/components/DataTable/DataTableBody.tsx +5 -1
  105. package/src/components/DataTable/DataTableHead.tsx +5 -3
  106. package/src/components/InputGroup/InputGroup.stories.tsx +27 -0
  107. package/src/components/InputGroup/InputGroup.tsx +19 -0
  108. package/src/components/InputGroup/InputGroupAddon.tsx +42 -0
  109. package/src/components/InputGroup/InputGroupButton.tsx +50 -0
  110. package/src/components/InputGroup/InputGroupInput.tsx +20 -0
  111. package/src/components/InputGroup/InputGroupText.tsx +17 -0
  112. package/src/components/InputGroup/InputGroupTextArea.tsx +20 -0
@@ -0,0 +1,27 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { SearchIcon } from 'lucide-react';
3
+
4
+ import { InputGroup } from './InputGroup.tsx';
5
+ import { InputGroupAddon } from './InputGroupAddon.tsx';
6
+ import { InputGroupInput } from './InputGroupInput.tsx';
7
+
8
+ type Story = StoryObj<typeof InputGroup>;
9
+
10
+ export default {
11
+ args: {
12
+ children: (
13
+ <>
14
+ <InputGroup>
15
+ <InputGroupInput placeholder="Search..." />
16
+ <InputGroupAddon>
17
+ <SearchIcon />
18
+ </InputGroupAddon>
19
+ </InputGroup>
20
+ </>
21
+ )
22
+ },
23
+ component: InputGroup,
24
+ tags: ['autodocs']
25
+ } as Meta<typeof InputGroup>;
26
+
27
+ export const Default: Story = {};
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+
3
+ import { cn } from '#utils';
4
+
5
+ const InputGroup = ({ className, ...props }: React.ComponentProps<'div'>) => {
6
+ return (
7
+ <div
8
+ className={cn(
9
+ 'border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5',
10
+ className
11
+ )}
12
+ data-slot="input-group"
13
+ role="group"
14
+ {...props}
15
+ />
16
+ );
17
+ };
18
+
19
+ export { InputGroup };
@@ -0,0 +1,42 @@
1
+ import * as React from 'react';
2
+
3
+ import { cva } from 'class-variance-authority';
4
+ import type { VariantProps } from 'class-variance-authority';
5
+
6
+ import { cn } from '#utils';
7
+
8
+ const inputGroupAddonVariants = cva(
9
+ "text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none",
10
+ {
11
+ defaultVariants: {
12
+ align: 'inline-start'
13
+ },
14
+ variants: {
15
+ align: {
16
+ 'block-end': 'px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start',
17
+ 'block-start':
18
+ 'px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start',
19
+ 'inline-end': 'pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem] order-last',
20
+ 'inline-start': 'pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem] order-first'
21
+ }
22
+ }
23
+ }
24
+ );
25
+
26
+ //ensure that Group encapsulates the input and the addon
27
+ const InputGroupAddon = ({
28
+ align = 'inline-start',
29
+ className,
30
+ ...props
31
+ }: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) => {
32
+ return (
33
+ <div
34
+ className={cn(inputGroupAddonVariants({ align }), className)}
35
+ data-align={align}
36
+ data-slot="input-group-addon"
37
+ {...props}
38
+ />
39
+ );
40
+ };
41
+
42
+ export { InputGroupAddon };
@@ -0,0 +1,50 @@
1
+ import * as React from 'react';
2
+
3
+ import { cva } from 'class-variance-authority';
4
+ import type { VariantProps } from 'class-variance-authority';
5
+
6
+ import { cn } from '#utils';
7
+
8
+ import { Button } from '../Button/Button.tsx';
9
+
10
+ const inputGroupButtonVariants = cva('gap-2 text-sm flex items-center shadow-none', {
11
+ defaultVariants: {
12
+ size: 'xs'
13
+ },
14
+ variants: {
15
+ size: {
16
+ 'icon-sm': 'size-8 p-0 has-[>svg]:p-0',
17
+ 'icon-xs': 'size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0',
18
+ sm: '',
19
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5"
20
+ }
21
+ }
22
+ });
23
+
24
+ const buttonSizeMap = {
25
+ 'icon-sm': 'icon',
26
+ 'icon-xs': 'icon',
27
+ sm: 'sm',
28
+ xs: 'sm'
29
+ } as const;
30
+
31
+ const InputGroupButton = ({
32
+ className,
33
+ size = 'xs',
34
+ type = 'button',
35
+ variant = 'ghost',
36
+ ...props
37
+ }: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>) => {
38
+ return (
39
+ <Button
40
+ className={cn(inputGroupButtonVariants({ size }), className)}
41
+ data-size={size}
42
+ size={buttonSizeMap[size ?? 'xs']}
43
+ type={type}
44
+ variant={variant}
45
+ {...props}
46
+ />
47
+ );
48
+ };
49
+
50
+ export { InputGroupButton };
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+
3
+ import { cn } from '#utils';
4
+
5
+ import { Input } from '../Input/Input.tsx';
6
+
7
+ const InputGroupInput = ({ className, ...props }: React.ComponentProps<'input'>) => {
8
+ return (
9
+ <Input
10
+ className={cn(
11
+ 'flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',
12
+ className
13
+ )}
14
+ data-slot="input-group-control"
15
+ {...props}
16
+ />
17
+ );
18
+ };
19
+
20
+ export { InputGroupInput };
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+
3
+ import { cn } from '#utils';
4
+
5
+ const InputGroupText = ({ className, ...props }: React.ComponentProps<'span'>) => {
6
+ return (
7
+ <span
8
+ className={cn(
9
+ "text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
10
+ className
11
+ )}
12
+ {...props}
13
+ />
14
+ );
15
+ };
16
+
17
+ export { InputGroupText };
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+
3
+ import { cn } from '#utils';
4
+
5
+ import { TextArea } from '../TextArea/TextArea.tsx';
6
+
7
+ const InputGroupTextArea = ({ className, ...props }: React.ComponentProps<'textarea'>) => {
8
+ return (
9
+ <TextArea
10
+ className={cn(
11
+ 'flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent',
12
+ className
13
+ )}
14
+ data-slot="input-group-control"
15
+ {...props}
16
+ />
17
+ );
18
+ };
19
+
20
+ export { InputGroupTextArea };