@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,169 +0,0 @@
1
- import { createStore } from 'solid-js/store'
2
- import { onCleanup, createEffect, For, splitProps, mergeProps } from 'solid-js'
3
- import { CircleCheck, TriangleAlert, XCircle, Info } from 'lucide-solid'
4
- import { CloseButton } from '../CloseButton/CloseButton.jsx'
5
- import styles from './Toast.module.css'
6
-
7
- const positions = {
8
- 'top-left': styles.positionTopLeft,
9
- 'top-center': styles.positionTopCenter,
10
- 'top-right': styles.positionTopRight,
11
- 'bottom-left': styles.positionBottomLeft,
12
- 'bottom-center': styles.positionBottomCenter,
13
- 'bottom-right': styles.positionBottomRight,
14
- }
15
-
16
- const intents = {
17
- info: styles.intentInfo,
18
- success: styles.intentSuccess,
19
- warning: styles.intentWarning,
20
- danger: styles.intentDanger,
21
- }
22
-
23
- const intentIcons = {
24
- success: () => <CircleCheck size={20} aria-hidden="true" />,
25
- warning: () => <TriangleAlert size={20} aria-hidden="true" />,
26
- danger: () => <XCircle size={20} aria-hidden="true" />,
27
- info: () => <Info size={20} aria-hidden="true" />,
28
- }
29
-
30
- let nextId = 0
31
- const [toasts, setToasts] = createStore([])
32
-
33
- /**
34
- * @param {string | {
35
- * title: string
36
- * description?: string
37
- * intent?: 'info' | 'success' | 'warning' | 'danger'
38
- * duration?: number
39
- * }} payload
40
- */
41
- export function toast(payload) {
42
- const config = typeof payload === 'string' ? { title: payload } : payload
43
-
44
- const id = ++nextId
45
- const duration = config.duration ?? 5000
46
-
47
- setToasts([...toasts, {
48
- id,
49
- title: config.title,
50
- description: config.description ?? '',
51
- intent: config.intent ?? 'info',
52
- duration,
53
- state: 'enter',
54
- }])
55
-
56
- if (duration > 0) {
57
- setTimeout(() => dismiss(id), duration)
58
- }
59
-
60
- return id
61
- }
62
-
63
- function dismiss(id) {
64
- setToasts(toast => toast.id === id, 'state', 'exit')
65
- }
66
-
67
- function remove(id) {
68
- setToasts(toasts => toasts.filter(t => t.id !== id))
69
- }
70
-
71
- const REGION_DEFAULT_PROPS = {
72
- position: 'top-right',
73
- }
74
-
75
- /**
76
- * @param {{
77
- * position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'
78
- * class?: string
79
- * }} props
80
- */
81
- export function Toast(props) {
82
- const [local, rest] = splitProps(
83
- mergeProps(REGION_DEFAULT_PROPS, props),
84
- ['position', 'class'],
85
- )
86
-
87
- return (
88
- <section
89
- {...rest}
90
- aria-live="polite"
91
- aria-label="Notifications"
92
- class={[
93
- 'balik-toast-region',
94
- styles.region,
95
- positions[local.position],
96
- local.class,
97
- ]
98
- .filter(Boolean)
99
- .join(' ')}
100
- >
101
- <For each={toasts}>
102
- {(item) => (
103
- <ToastItem
104
- id={item.id}
105
- title={item.title}
106
- description={item.description}
107
- intent={item.intent}
108
- state={item.state}
109
- />
110
- )}
111
- </For>
112
- </section>
113
- )
114
- }
115
-
116
- /**
117
- * @param {{
118
- * id: number
119
- * title: string
120
- * description: string
121
- * intent: string
122
- * state: string
123
- * }} props
124
- */
125
- function ToastItem(props) {
126
- const [local] = splitProps(props, ['id', 'title', 'description', 'intent', 'state'])
127
-
128
- const onTransitionEnd = (e) => {
129
- if (e.target === e.currentTarget && local.state === 'exit') {
130
- remove(local.id)
131
- }
132
- }
133
-
134
- createEffect(() => {
135
- if (local.state === 'enter') {
136
- const raf = requestAnimationFrame(() => {
137
- setToasts(toast => toast.id === local.id, 'state', 'visible')
138
- })
139
- onCleanup(() => cancelAnimationFrame(raf))
140
- }
141
- })
142
-
143
- return (
144
- <div
145
- role="status"
146
- class={[
147
- 'balik-toast',
148
- styles.item,
149
- intents[local.intent],
150
- local.state === 'exit' && styles.itemExit,
151
- local.state === 'visible' && styles.itemVisible,
152
- ]
153
- .filter(Boolean)
154
- .join(' ')}
155
- onTransitionEnd={onTransitionEnd}
156
- >
157
- <span class={styles.icon}>
158
- {intentIcons[local.intent]()}
159
- </span>
160
- <div class={styles.body}>
161
- <p class={styles.title}>{local.title}</p>
162
- {local.description && (
163
- <p class={styles.description}>{local.description}</p>
164
- )}
165
- </div>
166
- <CloseButton size="xs" class={styles.close} onClick={() => dismiss(local.id)} />
167
- </div>
168
- )
169
- }
@@ -1,152 +0,0 @@
1
- .region {
2
- position: fixed;
3
- z-index: var(--b-z-index-toast);
4
- display: flex;
5
- flex-direction: column;
6
- gap: var(--b-spacing-sm);
7
- max-width: 420px;
8
- width: 100%;
9
- padding: var(--b-spacing-md);
10
- pointer-events: none;
11
- }
12
-
13
- .positionTopLeft {
14
- top: 0;
15
- left: 0;
16
- align-items: flex-start;
17
- }
18
-
19
- .positionTopCenter {
20
- top: 0;
21
- left: 50%;
22
- transform: translateX(-50%);
23
- align-items: center;
24
- }
25
-
26
- .positionTopRight {
27
- top: 0;
28
- right: 0;
29
- align-items: flex-end;
30
- }
31
-
32
- .positionBottomLeft {
33
- bottom: 0;
34
- left: 0;
35
- align-items: flex-start;
36
- flex-direction: column-reverse;
37
- }
38
-
39
- .positionBottomCenter {
40
- bottom: 0;
41
- left: 50%;
42
- transform: translateX(-50%);
43
- align-items: center;
44
- flex-direction: column-reverse;
45
- }
46
-
47
- .positionBottomRight {
48
- bottom: 0;
49
- right: 0;
50
- align-items: flex-end;
51
- flex-direction: column-reverse;
52
- }
53
-
54
- .item {
55
- display: flex;
56
- align-items: flex-start;
57
- gap: var(--b-spacing-sm);
58
- width: 100%;
59
- max-width: 380px;
60
- padding: var(--b-container-padding-sm) var(--b-container-padding-md);
61
- background-color: var(--base-bg);
62
- border-radius: var(--b-radius-l2-sm);
63
- box-shadow: var(--b-shadow-md);
64
- pointer-events: auto;
65
- opacity: 0;
66
- transform: translateY(calc(var(--_toast-dir, -1) * -8px)) scale(0.96);
67
- transition:
68
- opacity var(--b-transition-normal),
69
- transform var(--b-transition-normal);
70
- }
71
-
72
- .itemVisible {
73
- opacity: 1;
74
- transform: translateY(0) scale(1);
75
- }
76
-
77
- .itemExit {
78
- opacity: 0;
79
- transform: translateY(calc(var(--_toast-dir, -1) * -8px)) scale(0.96);
80
- }
81
-
82
- .icon {
83
- flex-shrink: 0;
84
- width: 20px;
85
- height: 20px;
86
- margin-top: 1px;
87
- }
88
-
89
- .icon svg {
90
- display: block;
91
- width: 100%;
92
- height: 100%;
93
- }
94
-
95
- .body {
96
- flex: 1;
97
- min-width: 0;
98
- }
99
-
100
- .title {
101
- margin: 0;
102
- font-size: var(--b-comp-font-size-md);
103
- line-height: var(--b-comp-line-height-md);
104
- color: var(--base-fg);
105
- word-break: break-word;
106
- }
107
-
108
- .description {
109
- margin: var(--b-spacing-xxs) 0 0;
110
- font-size: var(--b-comp-font-size-sm);
111
- line-height: var(--b-comp-line-height-sm);
112
- color: color-mix(in oklch, var(--base-fg) 65%, transparent);
113
- word-break: break-word;
114
- }
115
-
116
- .close {
117
- flex-shrink: 0;
118
- display: flex;
119
- align-items: center;
120
- justify-content: center;
121
- width: 24px;
122
- height: 24px;
123
- margin: -2px -6px 0 0;
124
- padding: 0;
125
- border: none;
126
- border-radius: var(--b-radius-l1-sm);
127
- background: transparent;
128
- color: color-mix(in oklch, var(--base-fg) 40%, transparent);
129
- cursor: pointer;
130
- }
131
-
132
- .close svg {
133
- display: block;
134
- width: 16px;
135
- height: 16px;
136
- }
137
-
138
- .intentSuccess .icon {
139
- color: var(--color-success);
140
- }
141
-
142
- .intentWarning .icon {
143
- color: var(--color-warning);
144
- }
145
-
146
- .intentDanger .icon {
147
- color: var(--color-danger);
148
- }
149
-
150
- .intentInfo .icon {
151
- color: var(--color-info);
152
- }
@@ -1 +0,0 @@
1
- export { Toast, toast } from './Toast.jsx'
@@ -1,42 +0,0 @@
1
- import { splitProps, mergeProps } from 'solid-js'
2
- import { Portal } from 'solid-js/web'
3
- import { Tooltip as ArkTooltip } from '@ark-ui/solid'
4
- import styles from './Tooltip.module.css'
5
-
6
- const DEFAULT_PROPS = {
7
- openDelay: 300,
8
- closeDelay: 100,
9
- }
10
-
11
- /**
12
- * @param {import('@ark-ui/solid').TooltipRootProps & {
13
- * content: string
14
- * class?: string
15
- * }} props
16
- */
17
- export function Tooltip(props) {
18
- const [local, rest] = splitProps(
19
- mergeProps(DEFAULT_PROPS, props),
20
- ['content', 'class', 'children'],
21
- )
22
-
23
- return (
24
- <ArkTooltip.Root {...rest} openDelay={local.openDelay} closeDelay={local.closeDelay}>
25
- <ArkTooltip.Trigger as="div" class={styles.trigger}>
26
- {local.children}
27
- </ArkTooltip.Trigger>
28
- <Portal mount={document.body}>
29
- <ArkTooltip.Positioner class={styles.positioner}>
30
- <ArkTooltip.Content class={styles.content}>
31
- <ArkTooltip.Arrow class={styles.arrow}>
32
- <ArkTooltip.ArrowTip class={styles.arrowTip} />
33
- </ArkTooltip.Arrow>
34
- {local.content}
35
- </ArkTooltip.Content>
36
- </ArkTooltip.Positioner>
37
- </Portal>
38
- </ArkTooltip.Root>
39
- )
40
- }
41
-
42
- Tooltip.Original = ArkTooltip
@@ -1,41 +0,0 @@
1
- .trigger {
2
- display: inline-flex;
3
- background: none;
4
- border: none;
5
- padding: 0;
6
- font: inherit;
7
- cursor: inherit;
8
- }
9
-
10
- .positioner {
11
- z-index: calc(var(--b-z-index-modal) + 1);
12
- }
13
-
14
- .content {
15
- padding: 4px 10px;
16
- border-radius: 6px;
17
- background-color: color-mix(in oklch, var(--base-fg) 90%, var(--base-bg));
18
- color: var(--base-bg);
19
- font-size: 12px;
20
- line-height: 18px;
21
- font-family: var(--b-font-family, inherit);
22
- white-space: nowrap;
23
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
24
- animation: tooltipIn 0.15s ease;
25
- }
26
-
27
- @keyframes tooltipIn {
28
- from {
29
- opacity: 0;
30
- transform: scale(0.95);
31
- }
32
- to {
33
- opacity: 1;
34
- transform: scale(1);
35
- }
36
- }
37
-
38
- .arrowTip {
39
- --arrow-size: 6px;
40
- --arrow-background: color-mix(in oklch, var(--base-fg) 90%, var(--base-bg));
41
- }
@@ -1 +0,0 @@
1
- export { Tooltip } from './Tooltip.jsx'
package/src/index.js DELETED
@@ -1,34 +0,0 @@
1
- export { Button } from './Button/Button.jsx'
2
- export { Input } from './Input/Input.jsx'
3
- export { Textarea } from './Textarea/Textarea.jsx'
4
- export { Select } from './Select/Select.jsx'
5
- export { SelectPc } from './SelectPc/Select.jsx'
6
- export { Checkbox } from './Checkbox/Checkbox.jsx'
7
- export { RadioGroup } from './RadioGroup/RadioGroup.jsx'
8
- export { Radio } from './RadioGroup/Radio.jsx'
9
- export { Switch } from './Switch/Switch.jsx'
10
- export { Toast, toast } from './Toast/Toast.jsx'
11
- export { Dialog } from './Dialog/Dialog.jsx'
12
- export { Confirm } from './Confirm/Confirm.jsx'
13
- export { Alert } from './Alert/Alert.jsx'
14
- export { Tabs } from './Tabs/Tabs.jsx'
15
- export { Skeleton } from './Skeleton/Skeleton.jsx'
16
- export { Divider } from './Divider/Divider.jsx'
17
- export { Badge } from './Badge/Badge.jsx'
18
- export { Avatar } from './Avatar/Avatar.jsx'
19
- export { CloseButton } from './CloseButton/CloseButton.jsx'
20
- export { SearchInput } from './SearchInput/SearchInput.jsx'
21
- export { Clipboard } from './Clipboard/Clipboard.jsx'
22
- export { Spinner } from './Spinner/Spinner.jsx'
23
- export { Empty } from './Empty/Empty.jsx'
24
- export { Tag } from './Tag/Tag.jsx'
25
- export { BottomSheet } from './BottomSheet/BottomSheet.jsx'
26
- export { Card } from './Card/Card.jsx'
27
- export { Slider } from './Slider/Slider.jsx'
28
- export { BottomNavigation } from './BottomNavigation/BottomNavigation.jsx'
29
- export { Link } from './Link/Link.jsx'
30
- export { Drawer } from './Drawer/Drawer.jsx'
31
- export { Tooltip } from './Tooltip/Tooltip.jsx'
32
- export { Popover } from './Popover/Popover.jsx'
33
- export { Fab } from './Fab/Fab.jsx'
34
- import './styles/index.css'
@@ -1,90 +0,0 @@
1
- @import './tokens.css';
2
-
3
- *,
4
- *::before,
5
- *::after {
6
- box-sizing: border-box;
7
- }
8
-
9
- * {
10
- margin: 0;
11
- padding: 0;
12
- -webkit-tap-highlight-color: transparent;
13
- }
14
-
15
- body {
16
- font-family: var(--b-font-family);
17
- font-size: var(--b-font-size-md);
18
- line-height: var(--b-line-height);
19
- color: var(--base-fg);
20
- background-color: var(--base-bg);
21
- text-rendering: optimizeLegibility;
22
- -webkit-font-smoothing: antialiased;
23
- -moz-osx-font-smoothing: grayscale;
24
- }
25
-
26
- img,
27
- picture,
28
- video,
29
- canvas,
30
- svg {
31
- display: block;
32
- max-inline-size: 100%;
33
- }
34
-
35
- input,
36
- button,
37
- textarea,
38
- select {
39
- font: inherit;
40
- color: inherit;
41
- }
42
-
43
- p,
44
- h1,
45
- h2,
46
- h3,
47
- h4,
48
- h5,
49
- h6 {
50
- overflow-wrap: break-word;
51
- }
52
-
53
- p {
54
- text-wrap: pretty;
55
- }
56
-
57
- h1,
58
- h2,
59
- h3,
60
- h4,
61
- h5,
62
- h6 {
63
- text-wrap: balance;
64
- font-weight: 600;
65
- }
66
-
67
- a {
68
- color: inherit;
69
- text-decoration: none;
70
- }
71
-
72
- :where(ul, ol) {
73
- list-style: none;
74
- }
75
-
76
- :where(table) {
77
- border-collapse: collapse;
78
- border-spacing: 0;
79
- }
80
-
81
- :where(button) {
82
- appearance: none;
83
- background: none;
84
- border: none;
85
- cursor: pointer;
86
- }
87
-
88
- :where([hidden]) {
89
- display: none;
90
- }