@balikjs/mobile 0.0.1 → 0.1.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.
Files changed (104) hide show
  1. package/dist/index.js +3537 -0
  2. package/dist/styles.css +1 -1
  3. package/package.json +209 -10
  4. package/dist/mobile.js +0 -3062
  5. package/src/Alert/Alert.jsx +0 -67
  6. package/src/Alert/Alert.module.css +0 -87
  7. package/src/Alert/index.js +0 -1
  8. package/src/Avatar/Avatar.jsx +0 -77
  9. package/src/Avatar/Avatar.module.css +0 -74
  10. package/src/Avatar/index.js +0 -1
  11. package/src/Badge/Badge.jsx +0 -83
  12. package/src/Badge/Badge.module.css +0 -141
  13. package/src/Badge/index.js +0 -1
  14. package/src/BottomNavigation/BottomNavigation.jsx +0 -61
  15. package/src/BottomNavigation/BottomNavigation.module.css +0 -53
  16. package/src/BottomNavigation/index.js +0 -1
  17. package/src/BottomSheet/BottomSheet.jsx +0 -51
  18. package/src/BottomSheet/BottomSheet.module.css +0 -56
  19. package/src/BottomSheet/index.js +0 -1
  20. package/src/Button/Button.jsx +0 -77
  21. package/src/Button/Button.module.css +0 -124
  22. package/src/Button/index.js +0 -1
  23. package/src/Card/Card.jsx +0 -31
  24. package/src/Card/Card.module.css +0 -4
  25. package/src/Card/index.js +0 -1
  26. package/src/Checkbox/Checkbox.jsx +0 -64
  27. package/src/Checkbox/Checkbox.module.css +0 -146
  28. package/src/Checkbox/index.js +0 -1
  29. package/src/Clipboard/Clipboard.jsx +0 -82
  30. package/src/Clipboard/Clipboard.module.css +0 -126
  31. package/src/Clipboard/index.js +0 -1
  32. package/src/CloseButton/CloseButton.jsx +0 -51
  33. package/src/CloseButton/CloseButton.module.css +0 -94
  34. package/src/Confirm/Confirm.jsx +0 -52
  35. package/src/Confirm/Confirm.module.css +0 -5
  36. package/src/Confirm/index.js +0 -1
  37. package/src/Dialog/Dialog.jsx +0 -63
  38. package/src/Dialog/Dialog.module.css +0 -111
  39. package/src/Dialog/index.js +0 -1
  40. package/src/Divider/Divider.jsx +0 -38
  41. package/src/Divider/Divider.module.css +0 -16
  42. package/src/Divider/index.js +0 -1
  43. package/src/Drawer/Drawer.jsx +0 -55
  44. package/src/Drawer/Drawer.module.css +0 -68
  45. package/src/Drawer/index.js +0 -1
  46. package/src/Empty/Empty.jsx +0 -35
  47. package/src/Empty/Empty.module.css +0 -17
  48. package/src/Empty/index.js +0 -1
  49. package/src/Fab/Fab.jsx +0 -91
  50. package/src/Fab/Fab.module.css +0 -94
  51. package/src/Fab/index.js +0 -1
  52. package/src/Input/Input.jsx +0 -53
  53. package/src/Input/Input.module.css +0 -97
  54. package/src/Input/index.js +0 -1
  55. package/src/Link/Link.jsx +0 -31
  56. package/src/Link/Link.module.css +0 -18
  57. package/src/Link/index.js +0 -1
  58. package/src/Popover/Popover.jsx +0 -162
  59. package/src/Popover/Popover.module.css +0 -63
  60. package/src/Popover/index.js +0 -1
  61. package/src/RadioGroup/Radio.jsx +0 -52
  62. package/src/RadioGroup/Radio.module.css +0 -133
  63. package/src/RadioGroup/RadioGroup.jsx +0 -36
  64. package/src/RadioGroup/RadioGroup.module.css +0 -23
  65. package/src/RadioGroup/index.js +0 -2
  66. package/src/SearchInput/SearchInput.jsx +0 -89
  67. package/src/SearchInput/SearchInput.module.css +0 -169
  68. package/src/SearchInput/index.js +0 -1
  69. package/src/Select/Select.jsx +0 -101
  70. package/src/Select/Select.module.css +0 -174
  71. package/src/Select/index.js +0 -1
  72. package/src/SelectPc/Select.jsx +0 -88
  73. package/src/SelectPc/SelectPc.module.css +0 -132
  74. package/src/SelectPc/index.js +0 -1
  75. package/src/Skeleton/Skeleton.jsx +0 -55
  76. package/src/Skeleton/Skeleton.module.css +0 -33
  77. package/src/Skeleton/index.js +0 -1
  78. package/src/Slider/Slider.jsx +0 -50
  79. package/src/Slider/Slider.module.css +0 -77
  80. package/src/Slider/index.js +0 -1
  81. package/src/Spinner/Spinner.jsx +0 -45
  82. package/src/Spinner/Spinner.module.css +0 -35
  83. package/src/Spinner/index.js +0 -1
  84. package/src/Switch/Switch.jsx +0 -51
  85. package/src/Switch/Switch.module.css +0 -156
  86. package/src/Switch/index.js +0 -1
  87. package/src/Tabs/Tabs.jsx +0 -75
  88. package/src/Tabs/Tabs.module.css +0 -45
  89. package/src/Tabs/index.js +0 -1
  90. package/src/Tag/Tag.jsx +0 -74
  91. package/src/Tag/Tag.module.css +0 -128
  92. package/src/Tag/index.js +0 -1
  93. package/src/Textarea/Textarea.jsx +0 -52
  94. package/src/Textarea/Textarea.module.css +0 -89
  95. package/src/Textarea/index.js +0 -1
  96. package/src/Toast/Toast.jsx +0 -169
  97. package/src/Toast/Toast.module.css +0 -152
  98. package/src/Toast/index.js +0 -1
  99. package/src/Tooltip/Tooltip.jsx +0 -42
  100. package/src/Tooltip/Tooltip.module.css +0 -41
  101. package/src/Tooltip/index.js +0 -1
  102. package/src/index.js +0 -34
  103. package/src/styles/index.css +0 -90
  104. package/src/styles/tokens.css +0 -227
@@ -1,52 +0,0 @@
1
- import { splitProps, mergeProps } from 'solid-js'
2
- import { RadioGroup as ArkRadioGroup } from '@ark-ui/solid'
3
- import styles from './Radio.module.css'
4
-
5
- const sizes = {
6
- xs: styles.sizeXs,
7
- sm: styles.sizeSm,
8
- md: styles.sizeMd,
9
- lg: styles.sizeLg,
10
- xl: styles.sizeXl,
11
- '2xl': styles.size2xl,
12
- }
13
-
14
- /**
15
- * @param {import('@ark-ui/solid').RadioGroupItemProps & {
16
- * size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'
17
- * class?: string
18
- * }} props
19
- */
20
- export function Radio(props) {
21
- const [local, rest] = splitProps(
22
- mergeProps({ size: 'md' }, props),
23
- ['class', 'children', 'size'],
24
- )
25
-
26
- return (
27
- <ArkRadioGroup.Item
28
- {...rest}
29
- class={[
30
- 'balik-radio',
31
- styles.item,
32
- sizes[local.size],
33
- local.class,
34
- ]
35
- .filter(Boolean)
36
- .join(' ')}
37
- >
38
- <ArkRadioGroup.ItemControl class={styles.control} />
39
- <ArkRadioGroup.ItemText class={styles.text}>
40
- {local.children}
41
- </ArkRadioGroup.ItemText>
42
- <ArkRadioGroup.ItemHiddenInput />
43
- </ArkRadioGroup.Item>
44
- )
45
- }
46
-
47
- Radio.Original = {
48
- Item: ArkRadioGroup.Item,
49
- ItemControl: ArkRadioGroup.ItemControl,
50
- ItemText: ArkRadioGroup.ItemText,
51
- ItemHiddenInput: ArkRadioGroup.ItemHiddenInput,
52
- }
@@ -1,133 +0,0 @@
1
- .item {
2
- display: inline-flex;
3
- align-items: center;
4
- gap: var(--_ctrl-gap, 10px);
5
- min-height: var(--_ctrl-min-height, var(--b-comp-height-md));
6
- cursor: pointer;
7
- font-family: inherit;
8
- user-select: none;
9
- touch-action: manipulation;
10
- }
11
-
12
- .item[data-disabled] {
13
- cursor: not-allowed;
14
- }
15
-
16
- .control {
17
- width: var(--_ctrl-size, var(--b-comp-secondary-height-md));
18
- height: var(--_ctrl-size, var(--b-comp-secondary-height-md));
19
- display: flex;
20
- align-items: center;
21
- justify-content: center;
22
- flex-shrink: 0;
23
- border-radius: 50%;
24
- border: 1px solid var(--base-edge);
25
- background-color: var(--base-bg);
26
- transition: border-color var(--b-transition-fast);
27
- }
28
-
29
- .control::after {
30
- content: '';
31
- display: block;
32
- width: var(--_ctrl-dot-size, calc(var(--b-comp-secondary-height-md) / 2));
33
- height: var(--_ctrl-dot-size, calc(var(--b-comp-secondary-height-md) / 2));
34
- border-radius: 50%;
35
- background-color: var(--base-edge);
36
- transform: scale(0);
37
- transition: transform var(--b-transition-fast);
38
- }
39
-
40
- .control[data-state="checked"] {
41
- border-color: var(--base-edge);
42
- }
43
-
44
- .control[data-state="checked"]::after {
45
- transform: scale(1);
46
- }
47
-
48
- .item[data-disabled] .control {
49
- border-color: var(--color-disabled-border);
50
- background-color: var(--color-disabled-bg);
51
- }
52
-
53
- .item[data-disabled] .control[data-state="checked"]::after {
54
- background-color: var(--color-disabled-fg);
55
- }
56
-
57
- .item[data-invalid] .control {
58
- border-color: var(--color-danger);
59
- }
60
-
61
- .item[data-invalid] .control[data-state="checked"]::after {
62
- background-color: var(--color-danger);
63
- }
64
-
65
- .control:active:not([data-disabled]) {
66
- transform: scale(0.88);
67
- }
68
-
69
- .text {
70
- font-size: var(--_ctrl-font-size, var(--b-comp-font-size-md));
71
- line-height: var(--_ctrl-line-height, var(--b-comp-line-height-md));
72
- color: var(--base-fg);
73
- }
74
-
75
- .item[data-disabled] .text {
76
- color: var(--color-disabled-fg);
77
- }
78
-
79
- /* ─── Size Overrides ─── */
80
-
81
- .sizeXs {
82
- --_ctrl-size: var(--b-comp-secondary-height-xs);
83
- --_ctrl-dot-size: calc(var(--b-comp-secondary-height-xs) / 2);
84
- --_ctrl-gap: 8px;
85
- --_ctrl-min-height: var(--b-comp-height-xs);
86
- --_ctrl-font-size: var(--b-comp-font-size-xs);
87
- --_ctrl-line-height: var(--b-comp-line-height-xs);
88
- }
89
-
90
- .sizeSm {
91
- --_ctrl-size: var(--b-comp-secondary-height-sm);
92
- --_ctrl-dot-size: calc(var(--b-comp-secondary-height-sm) / 2);
93
- --_ctrl-gap: 9px;
94
- --_ctrl-min-height: var(--b-comp-height-sm);
95
- --_ctrl-font-size: var(--b-comp-font-size-sm);
96
- --_ctrl-line-height: var(--b-comp-line-height-sm);
97
- }
98
-
99
- .sizeMd {
100
- --_ctrl-size: var(--b-comp-secondary-height-md);
101
- --_ctrl-dot-size: calc(var(--b-comp-secondary-height-md) / 2);
102
- --_ctrl-gap: 10px;
103
- --_ctrl-min-height: var(--b-comp-height-md);
104
- --_ctrl-font-size: var(--b-comp-font-size-md);
105
- --_ctrl-line-height: var(--b-comp-line-height-md);
106
- }
107
-
108
- .sizeLg {
109
- --_ctrl-size: var(--b-comp-secondary-height-lg);
110
- --_ctrl-dot-size: calc(var(--b-comp-secondary-height-lg) / 2);
111
- --_ctrl-gap: 11px;
112
- --_ctrl-min-height: var(--b-comp-height-lg);
113
- --_ctrl-font-size: var(--b-comp-font-size-lg);
114
- --_ctrl-line-height: var(--b-comp-line-height-lg);
115
- }
116
-
117
- .sizeXl {
118
- --_ctrl-size: var(--b-comp-secondary-height-xl);
119
- --_ctrl-dot-size: calc(var(--b-comp-secondary-height-xl) / 2);
120
- --_ctrl-gap: 12px;
121
- --_ctrl-min-height: var(--b-comp-height-xl);
122
- --_ctrl-font-size: var(--b-comp-font-size-xl);
123
- --_ctrl-line-height: var(--b-comp-line-height-xl);
124
- }
125
-
126
- .size2xl {
127
- --_ctrl-size: var(--b-comp-secondary-height-2xl);
128
- --_ctrl-dot-size: calc(var(--b-comp-secondary-height-2xl) / 2);
129
- --_ctrl-gap: 16px;
130
- --_ctrl-min-height: var(--b-comp-height-2xl);
131
- --_ctrl-font-size: var(--b-comp-font-size-2xl);
132
- --_ctrl-line-height: var(--b-comp-line-height-2xl);
133
- }
@@ -1,36 +0,0 @@
1
- import { splitProps, mergeProps } from 'solid-js'
2
- import { RadioGroup as ArkRadioGroup } from '@ark-ui/solid'
3
- import styles from './RadioGroup.module.css'
4
-
5
- /**
6
- * @param {import('@ark-ui/solid').RadioGroupRootProps & {
7
- * label?: string
8
- * class?: string
9
- * }} props
10
- */
11
- export function RadioGroup(props) {
12
- const [local, rest] = splitProps(
13
- mergeProps({}, props),
14
- ['label', 'class', 'children'],
15
- )
16
-
17
- return (
18
- <ArkRadioGroup.Root
19
- {...rest}
20
- class={[
21
- 'balik-radio-group',
22
- styles.root,
23
- local.class,
24
- ]
25
- .filter(Boolean)
26
- .join(' ')}
27
- >
28
- {local.label && (
29
- <ArkRadioGroup.Label class={styles.label}>
30
- {local.label}
31
- </ArkRadioGroup.Label>
32
- )}
33
- {local.children}
34
- </ArkRadioGroup.Root>
35
- )
36
- }
@@ -1,23 +0,0 @@
1
- .root {
2
- display: flex;
3
- flex-direction: column;
4
- gap: 0;
5
- }
6
-
7
- .root[data-orientation="horizontal"] {
8
- flex-direction: row;
9
- gap: 20px;
10
- }
11
-
12
- .label {
13
- font-size: var(--b-comp-font-size-sm);
14
- font-weight: 600;
15
- color: var(--base-fg);
16
- margin-bottom: 8px;
17
- }
18
-
19
- .root[data-orientation="horizontal"] .label {
20
- margin-bottom: 0;
21
- align-self: center;
22
- margin-inline-end: 4px;
23
- }
@@ -1,2 +0,0 @@
1
- export { RadioGroup } from './RadioGroup.jsx'
2
- export { Radio } from './Radio.jsx'
@@ -1,89 +0,0 @@
1
- import { splitProps, mergeProps, createSignal, onCleanup, on } from 'solid-js'
2
- import { ark } from '@ark-ui/solid/factory'
3
- import { Search } from 'lucide-solid'
4
- import styles from './SearchInput.module.css'
5
-
6
- const variants = {
7
- solid: styles.solid,
8
- outline: styles.outline,
9
- singleline: styles.singleline,
10
- }
11
-
12
- const sizes = {
13
- xs: styles.sizeXs,
14
- sm: styles.sizeSm,
15
- md: styles.sizeMd,
16
- lg: styles.sizeLg,
17
- xl: styles.sizeXl,
18
- }
19
-
20
- const DEFAULT_PROPS = {
21
- variant: 'outline',
22
- size: 'md',
23
- disabled: false,
24
- debounce: 300,
25
- }
26
-
27
- /**
28
- * @param {import('solid-js').JSX.InputHTMLAttributes<HTMLInputElement> & {
29
- * variant?: 'solid' | 'outline' | 'singleline'
30
- * size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
31
- * onKeywordChange?: (keyword: string) => void
32
- * debounce?: number
33
- * class?: string
34
- * }} props
35
- */
36
- export function SearchInput(props) {
37
- const [local, rest] = splitProps(
38
- mergeProps(DEFAULT_PROPS, props),
39
- ['variant', 'size', 'class', 'onKeywordChange', 'debounce', 'placeholder'],
40
- )
41
-
42
- const [keyword, setKeyword] = createSignal('')
43
-
44
- on(keyword, (val) => {
45
- const timer = setTimeout(() => {
46
- local.onKeywordChange?.(val)
47
- }, local.debounce)
48
- onCleanup(() => clearTimeout(timer))
49
- })
50
-
51
- const handleInput = (e) => {
52
- setKeyword(e.target.value)
53
- }
54
-
55
- return (
56
- <div
57
- class={[
58
- 'balik-search-input',
59
- `balik-search-input--${local.variant}`,
60
- `balik-search-input--${local.size}`,
61
- styles.base,
62
- variants[local.variant],
63
- sizes[local.size],
64
- local.class,
65
- ]
66
- .filter(Boolean)
67
- .join(' ')}
68
- >
69
- <Search
70
- aria-hidden="true"
71
- class={[
72
- 'balik-search-input__icon',
73
- styles.icon,
74
- ].join(' ')}
75
- />
76
- <ark.input
77
- {...rest}
78
- type="search"
79
- autocomplete="off"
80
- placeholder={local.placeholder}
81
- onInput={handleInput}
82
- class={[
83
- 'balik-search-input__input',
84
- styles.input,
85
- ].join(' ')}
86
- />
87
- </div>
88
- )
89
- }
@@ -1,169 +0,0 @@
1
- .base {
2
- position: relative;
3
- display: flex;
4
- align-items: center;
5
- width: 100%;
6
- }
7
-
8
- .icon {
9
- position: absolute;
10
- left: var(--_icon-offset);
11
- height: var(--_icon-size);
12
- width: var(--_icon-size);
13
- color: var(--color-disabled-fg);
14
- pointer-events: none;
15
- flex-shrink: 0;
16
- }
17
-
18
- .input {
19
- display: block;
20
- width: 100%;
21
- padding-left: var(--_input-padding-left);
22
- border: 1px solid transparent;
23
- border-radius: var(--_border-radius);
24
- font-family: inherit;
25
- outline: none;
26
- box-shadow: none;
27
- appearance: none;
28
- touch-action: manipulation;
29
- transition: background-color var(--b-transition-fast),
30
- border-color var(--b-transition-fast),
31
- color var(--b-transition-fast);
32
-
33
- --_current-intent: var(--base-edge);
34
- }
35
-
36
- .input::placeholder {
37
- color: var(--color-disabled-fg);
38
- }
39
-
40
- .input:disabled {
41
- background-color: var(--color-disabled-bg);
42
- border-color: var(--color-disabled-border);
43
- color: var(--color-disabled-fg);
44
- }
45
-
46
- .input::-webkit-search-decoration,
47
- .input::-webkit-search-cancel-button,
48
- .input::-webkit-search-results-button,
49
- .input::-webkit-search-results-decoration {
50
- display: none;
51
- }
52
-
53
- .solid {
54
- --_contain-bg: color-mix(in oklch, var(--base-fg) 2%, var(--base-bg));
55
- }
56
-
57
- .solid .input {
58
- background-color: var(--_contain-bg);
59
- border-color: transparent;
60
- }
61
-
62
- .solid .input:focus {
63
- background-color: var(--color-focus-bg);
64
- }
65
-
66
- .outline {
67
- --_contain-bg: var(--base-bg);
68
- }
69
-
70
- .outline .input {
71
- background-color: var(--_contain-bg);
72
- border-color: var(--_current-intent);
73
- }
74
-
75
- .outline .input:focus {
76
- background-color: var(--color-focus-bg);
77
- border-color: var(--color-focus-border);
78
- }
79
-
80
- .singleline {
81
- --_contain-bg: transparent;
82
- }
83
-
84
- .singleline .input {
85
- background-color: transparent;
86
- border-color: transparent;
87
- border-bottom-color: var(--_current-intent);
88
- border-radius: 0;
89
- }
90
-
91
- .singleline .input:focus {
92
- background-color: var(--color-focus-bg);
93
- border-bottom-color: var(--color-focus-border);
94
- }
95
-
96
- .sizeXs {
97
- --_border-radius: var(--b-radius-l1-xs);
98
- --_icon-size: 14px;
99
- --_icon-offset: 8px;
100
- --_input-padding-left: 26px;
101
- }
102
-
103
- .sizeXs .input {
104
- height: var(--b-comp-height-xs);
105
- line-height: var(--b-comp-line-height-xs);
106
- padding: var(--b-comp-padding-y-xs) var(--b-comp-padding-x-xs);
107
- padding-left: 26px;
108
- font-size: var(--b-comp-font-size-xs);
109
- }
110
-
111
- .sizeSm {
112
- --_border-radius: var(--b-radius-l1-sm);
113
- --_icon-size: 16px;
114
- --_icon-offset: 12px;
115
- --_input-padding-left: 32px;
116
- }
117
-
118
- .sizeSm .input {
119
- height: var(--b-comp-height-sm);
120
- line-height: var(--b-comp-line-height-sm);
121
- padding: var(--b-comp-padding-y-sm) var(--b-comp-padding-x-sm);
122
- padding-left: 32px;
123
- font-size: var(--b-comp-font-size-sm);
124
- }
125
-
126
- .sizeMd {
127
- --_border-radius: var(--b-radius-l1-md);
128
- --_icon-size: 18px;
129
- --_icon-offset: 14px;
130
- --_input-padding-left: 38px;
131
- }
132
-
133
- .sizeMd .input {
134
- height: var(--b-comp-height-md);
135
- line-height: var(--b-comp-line-height-md);
136
- padding: var(--b-comp-padding-y-md) var(--b-comp-padding-x-md);
137
- padding-left: 38px;
138
- font-size: var(--b-comp-font-size-md);
139
- }
140
-
141
- .sizeLg {
142
- --_border-radius: var(--b-radius-l1-lg);
143
- --_icon-size: 20px;
144
- --_icon-offset: 16px;
145
- --_input-padding-left: 42px;
146
- }
147
-
148
- .sizeLg .input {
149
- height: var(--b-comp-height-lg);
150
- line-height: var(--b-comp-line-height-lg);
151
- padding: var(--b-comp-padding-y-lg) var(--b-comp-padding-x-lg);
152
- padding-left: 42px;
153
- font-size: var(--b-comp-font-size-lg);
154
- }
155
-
156
- .sizeXl {
157
- --_border-radius: var(--b-radius-l1-xl);
158
- --_icon-size: 22px;
159
- --_icon-offset: 16px;
160
- --_input-padding-left: 46px;
161
- }
162
-
163
- .sizeXl .input {
164
- height: var(--b-comp-height-xl);
165
- line-height: var(--b-comp-line-height-xl);
166
- padding: var(--b-comp-padding-y-xl) var(--b-comp-padding-x-xl);
167
- padding-left: 46px;
168
- font-size: var(--b-comp-font-size-xl);
169
- }
@@ -1 +0,0 @@
1
- export { SearchInput } from './SearchInput.jsx'
@@ -1,101 +0,0 @@
1
- import { splitProps, mergeProps, For } from 'solid-js'
2
- import { Select as ArkSelect, useSelectContext } from '@ark-ui/solid'
3
- import { ChevronDown } from 'lucide-solid'
4
- import styles from './Select.module.css'
5
-
6
- const triggerSizes = {
7
- xs: styles.triggerSizeXs,
8
- sm: styles.triggerSizeSm,
9
- md: styles.triggerSizeMd,
10
- lg: styles.triggerSizeLg,
11
- xl: styles.triggerSizeXl,
12
- }
13
-
14
- function SelectSheet(props) {
15
- const api = useSelectContext()
16
- const isOpen = () => api().open
17
-
18
- return (
19
- <>
20
- <div
21
- class={styles.backdrop}
22
- data-open={isOpen() ? '' : undefined}
23
- onClick={() => api().setOpen(false)}
24
- />
25
- <div class={styles.sheet} data-open={isOpen() ? '' : undefined}>
26
- <div class={styles.header}>
27
- <span class={styles.title}>{props.title}</span>
28
- <button
29
- type="button"
30
- class={styles.cancelBtn}
31
- onClick={() => api().setOpen(false)}
32
- >
33
- Cancel
34
- </button>
35
- </div>
36
- <div class={styles.list}>
37
- <For each={api().collection.items}>
38
- {(item) => (
39
- <ArkSelect.Item item={item} class={styles.item}>
40
- <ArkSelect.ItemText>{item.label}</ArkSelect.ItemText>
41
- </ArkSelect.Item>
42
- )}
43
- </For>
44
- </div>
45
- </div>
46
- </>
47
- )
48
- }
49
-
50
- const DEFAULT_PROPS = {
51
- size: 'md',
52
- disabled: false,
53
- }
54
-
55
- /**
56
- * @param {import('solid-js').JSX.HTMLAttributes<HTMLDivElement> & {
57
- * size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
58
- * collection?: import('@ark-ui/solid').ListCollection<{ label: string, value: string, disabled?: boolean }>
59
- * placeholder?: string
60
- * title?: string
61
- * }} props
62
- */
63
- export function Select(props) {
64
- const [local, rest] = splitProps(
65
- mergeProps(DEFAULT_PROPS, props),
66
- ['size', 'class', 'collection', 'placeholder', 'title', 'disabled'],
67
- )
68
-
69
- return (
70
- <div class={styles.root}>
71
- <ArkSelect.Root
72
- collection={local.collection}
73
- disabled={local.disabled}
74
- {...rest}
75
- >
76
- <ArkSelect.Trigger
77
- class={[
78
- 'balik-select',
79
- `balik-select--${local.size}`,
80
- styles.triggerBase,
81
- triggerSizes[local.size],
82
- local.class,
83
- ]
84
- .filter(Boolean)
85
- .join(' ')}
86
- >
87
- <ArkSelect.ValueText
88
- placeholder={local.placeholder}
89
- />
90
- <span class={styles.indicator}>
91
- <ChevronDown size="1em" aria-hidden="true" />
92
- </span>
93
- </ArkSelect.Trigger>
94
- <SelectSheet title={local.title} />
95
- <ArkSelect.HiddenSelect />
96
- </ArkSelect.Root>
97
- </div>
98
- )
99
- }
100
-
101
- Select.Original = ArkSelect