@returnless/focus-ui 0.0.5 → 0.0.7
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/components/Button/Button.vue.d.ts +4 -1
- package/dist/components/Button/types.d.ts +2 -0
- package/dist/components/Link/Link.vue.d.ts +1 -1
- package/dist/components/Tag/Tag.vue.d.ts +6 -2
- package/dist/focus-ui.js +1779 -1769
- package/dist/focus-ui.umd.cjs +21 -21
- package/package.json +2 -3
- package/src/build-utils/generate-component-meta.ts +0 -80
- package/src/build-utils/update-component-list.js +0 -31
- package/src/build-utils/update-component-list.ts +0 -32
- package/src/components/Accordion/Accordion.vue +0 -20
- package/src/components/Accordion/AccordionContent.vue +0 -43
- package/src/components/Accordion/AccordionItem.vue +0 -21
- package/src/components/Accordion/AccordionTrigger.vue +0 -38
- package/src/components/Accordion/README.md +0 -56
- package/src/components/Accordion/index.ts +0 -4
- package/src/components/ActionList/ActionList.vue +0 -9
- package/src/components/ActionList/ActionListBody.vue +0 -11
- package/src/components/ActionList/ActionListItem.vue +0 -37
- package/src/components/ActionList/ActionListSection.vue +0 -7
- package/src/components/ActionList/ActionListTrigger.vue +0 -9
- package/src/components/ActionList/README.md +0 -113
- package/src/components/ActionList/index.ts +0 -5
- package/src/components/Alert/Alert.vue +0 -68
- package/src/components/Alert/AlertDescription.vue +0 -20
- package/src/components/Alert/AlertTitle.vue +0 -11
- package/src/components/Alert/DismissableAlertButton.vue +0 -36
- package/src/components/Alert/README.md +0 -150
- package/src/components/Alert/index.ts +0 -5
- package/src/components/Alert/types.ts +0 -1
- package/src/components/AlertDialog/AlertDialog.vue +0 -54
- package/src/components/AlertDialog/AlertDialogActionButton.vue +0 -16
- package/src/components/AlertDialog/AlertDialogCancelButton.vue +0 -15
- package/src/components/AlertDialog/AlertDialogContent.vue +0 -8
- package/src/components/AlertDialog/AlertDialogDescription.vue +0 -17
- package/src/components/AlertDialog/AlertDialogFooter.vue +0 -11
- package/src/components/AlertDialog/AlertDialogHeader.vue +0 -8
- package/src/components/AlertDialog/AlertDialogTitle.vue +0 -15
- package/src/components/AlertDialog/README.md +0 -84
- package/src/components/AlertDialog/index.ts +0 -8
- package/src/components/AspectRatio/AspectRatio.vue +0 -19
- package/src/components/AspectRatio/README.md +0 -36
- package/src/components/AspectRatio/index.ts +0 -1
- package/src/components/Avatar/Avatar.vue +0 -122
- package/src/components/Avatar/README.md +0 -116
- package/src/components/Avatar/index.ts +0 -1
- package/src/components/Badge/Badge.vue +0 -51
- package/src/components/Badge/BadgeContent.vue +0 -9
- package/src/components/Badge/BadgeIcon.vue +0 -7
- package/src/components/Badge/README.md +0 -131
- package/src/components/Badge/index.ts +0 -3
- package/src/components/BarChart/BarChart.vue +0 -80
- package/src/components/BarChart/BarChartContainer.vue +0 -7
- package/src/components/BarChart/BarChartStacked.vue +0 -93
- package/src/components/BarChart/README.md +0 -83
- package/src/components/BarChart/index.ts +0 -3
- package/src/components/Breadcrumbs/Breadcrumb.vue +0 -7
- package/src/components/Breadcrumbs/BreadcrumbEllipsis.vue +0 -12
- package/src/components/Breadcrumbs/BreadcrumbItem.vue +0 -8
- package/src/components/Breadcrumbs/BreadcrumbLink.vue +0 -13
- package/src/components/Breadcrumbs/BreadcrumbList.vue +0 -8
- package/src/components/Breadcrumbs/BreadcrumbPage.vue +0 -13
- package/src/components/Breadcrumbs/BreadcrumbSeparator.vue +0 -12
- package/src/components/Breadcrumbs/README.md +0 -91
- package/src/components/Breadcrumbs/index.ts +0 -7
- package/src/components/Button/Button.vue +0 -75
- package/src/components/Button/ButtonContent.vue +0 -7
- package/src/components/Button/ButtonIcon.vue +0 -32
- package/src/components/Button/README.md +0 -231
- package/src/components/Button/index.ts +0 -5
- package/src/components/Button/types.ts +0 -30
- package/src/components/ButtonGroup/ButtonGroup.vue +0 -7
- package/src/components/ButtonGroup/README.md +0 -42
- package/src/components/ButtonGroup/index.ts +0 -1
- package/src/components/Card/Card.vue +0 -7
- package/src/components/Card/CardDescription.vue +0 -11
- package/src/components/Card/CardFooter.vue +0 -7
- package/src/components/Card/CardHeader.vue +0 -7
- package/src/components/Card/CardHelp.vue +0 -23
- package/src/components/Card/CardSection.vue +0 -22
- package/src/components/Card/CardTitle.vue +0 -11
- package/src/components/Card/README.md +0 -156
- package/src/components/Card/index.ts +0 -7
- package/src/components/Checkbox/Checkbox.vue +0 -73
- package/src/components/Checkbox/README.md +0 -111
- package/src/components/Checkbox/index.ts +0 -1
- package/src/components/Collapsible/README.md +0 -25
- package/src/components/DataTable/README.md +0 -56
- package/src/components/DatePicker/DatePicker.vue +0 -120
- package/src/components/DatePicker/DatePickerCard.vue +0 -9
- package/src/components/DatePicker/README.md +0 -59
- package/src/components/DatePicker/index.ts +0 -2
- package/src/components/DescriptionList/DescriptionList.vue +0 -18
- package/src/components/DescriptionList/DescriptionListDescription.vue +0 -8
- package/src/components/DescriptionList/DescriptionListItem.vue +0 -21
- package/src/components/DescriptionList/DescriptionListTerm.vue +0 -11
- package/src/components/DescriptionList/README.md +0 -159
- package/src/components/DescriptionList/index.ts +0 -4
- package/src/components/Dialog/README.md +0 -2
- package/src/components/Dialog/index.ts +0 -0
- package/src/components/DropZone/DropZone.vue +0 -105
- package/src/components/DropZone/README.md +0 -48
- package/src/components/DropZone/index.ts +0 -1
- package/src/components/EmptyState/EmptyState.vue +0 -13
- package/src/components/EmptyState/EmptyStateActions.vue +0 -11
- package/src/components/EmptyState/EmptyStateContent.vue +0 -7
- package/src/components/EmptyState/EmptyStateDescription.vue +0 -11
- package/src/components/EmptyState/EmptyStateTitle.vue +0 -7
- package/src/components/EmptyState/README.md +0 -102
- package/src/components/EmptyState/index.ts +0 -5
- package/src/components/Feed/Feed.vue +0 -7
- package/src/components/Feed/FeedItem.vue +0 -19
- package/src/components/Feed/FeedItemBlock.vue +0 -11
- package/src/components/Feed/FeedItemDateIndicator.vue +0 -11
- package/src/components/Feed/FeedItemIcon.vue +0 -26
- package/src/components/Feed/FeedItemSimple.vue +0 -8
- package/src/components/Feed/README.md +0 -115
- package/src/components/Feed/index.ts +0 -6
- package/src/components/FileUploadButton/FileUploadButton.vue +0 -62
- package/src/components/FileUploadButton/index.ts +0 -1
- package/src/components/Form/Form.vue +0 -35
- package/src/components/Form/README.md +0 -52
- package/src/components/Form/index.ts +0 -1
- package/src/components/FormLayout/FormLayout.vue +0 -25
- package/src/components/FormLayout/README.md +0 -97
- package/src/components/FormLayout/index.ts +0 -1
- package/src/components/Heading/Heading.vue +0 -32
- package/src/components/Heading/index.ts +0 -3
- package/src/components/Heading/types.ts +0 -3
- package/src/components/Image/Image.vue +0 -30
- package/src/components/Image/index.ts +0 -1
- package/src/components/InertiaLink/InertiaLink.vue +0 -11
- package/src/components/InertiaLink/index.ts +0 -1
- package/src/components/InlineError/InlineError.vue +0 -21
- package/src/components/InlineError/README.md +0 -63
- package/src/components/InlineError/index.ts +0 -1
- package/src/components/InputLabel/InputLabel.vue +0 -32
- package/src/components/InputLabel/index.ts +0 -1
- package/src/components/KPICard/KPICard.vue +0 -28
- package/src/components/KPICard/KPICardSection.vue +0 -30
- package/src/components/KPICard/README.md +0 -124
- package/src/components/KPICard/index.ts +0 -2
- package/src/components/Legend/Legend.vue +0 -7
- package/src/components/Legend/LegendItem.vue +0 -34
- package/src/components/Legend/README.md +0 -32
- package/src/components/Legend/index.ts +0 -2
- package/src/components/Link/Link.vue +0 -38
- package/src/components/Link/README.md +0 -119
- package/src/components/Link/index.ts +0 -1
- package/src/components/Navigation/Navigation.vue +0 -8
- package/src/components/Navigation/NavigationItem.vue +0 -47
- package/src/components/Navigation/NavigationSecondarySection.vue +0 -12
- package/src/components/Navigation/NavigationSection.vue +0 -27
- package/src/components/Navigation/README.md +0 -83
- package/src/components/Navigation/index.ts +0 -4
- package/src/components/Page/Page.vue +0 -7
- package/src/components/Page/PageBody.vue +0 -36
- package/src/components/Page/PageDescription.vue +0 -11
- package/src/components/Page/PageHeader.vue +0 -34
- package/src/components/Page/PageTitle.vue +0 -12
- package/src/components/Page/README.md +0 -226
- package/src/components/Page/index.ts +0 -5
- package/src/components/Pagination/Pagination.vue +0 -8
- package/src/components/Pagination/PaginationNextButton.vue +0 -10
- package/src/components/Pagination/PaginationPreviousButton.vue +0 -10
- package/src/components/Pagination/README.md +0 -45
- package/src/components/Pagination/index.ts +0 -3
- package/src/components/PinInput/PinInput.vue +0 -169
- package/src/components/PinInput/README.md +0 -35
- package/src/components/PinInput/index.ts +0 -1
- package/src/components/Popover/Popover.vue +0 -18
- package/src/components/Popover/PopoverBody.vue +0 -11
- package/src/components/Popover/PopoverTrigger.vue +0 -9
- package/src/components/Popover/README.md +0 -79
- package/src/components/Popover/index.ts +0 -3
- package/src/components/Popper/Popper.vue +0 -91
- package/src/components/Popper/PopperBody.vue +0 -19
- package/src/components/Popper/PopperTrigger.vue +0 -14
- package/src/components/Popper/README.md +0 -42
- package/src/components/Popper/index.ts +0 -3
- package/src/components/ProgressBar/ProgressBar.vue +0 -51
- package/src/components/ProgressBar/ProgressBarIndicator.vue +0 -7
- package/src/components/ProgressBar/README.md +0 -98
- package/src/components/ProgressBar/index.ts +0 -2
- package/src/components/RadioButton/README.md +0 -111
- package/src/components/RadioButton/RadioButton.vue +0 -49
- package/src/components/RadioButton/index.ts +0 -1
- package/src/components/ResourceList/README.md +0 -160
- package/src/components/ResourceList/ResourceList.vue +0 -7
- package/src/components/ResourceList/ResourceListItem.vue +0 -7
- package/src/components/ResourceList/ResourceListItemContent.vue +0 -7
- package/src/components/ResourceList/index.ts +0 -3
- package/src/components/Select/README.md +0 -74
- package/src/components/Select/Select.vue +0 -91
- package/src/components/Select/SelectGroup.vue +0 -12
- package/src/components/Select/SelectOption.vue +0 -12
- package/src/components/Select/index.ts +0 -3
- package/src/components/Separator/README.md +0 -39
- package/src/components/Separator/Separator.vue +0 -24
- package/src/components/Separator/index.ts +0 -1
- package/src/components/Spinner/README.md +0 -53
- package/src/components/Spinner/Spinner.vue +0 -64
- package/src/components/Spinner/index.ts +0 -1
- package/src/components/StatusIndicator/README.md +0 -51
- package/src/components/StatusIndicator/StatusIndicator.vue +0 -44
- package/src/components/StatusIndicator/index.ts +0 -1
- package/src/components/Stepper/README.md +0 -38
- package/src/components/Stepper/Stepper.vue +0 -104
- package/src/components/Stepper/index.ts +0 -1
- package/src/components/Tabs/README.md +0 -53
- package/src/components/Tabs/TabTrigger.vue +0 -44
- package/src/components/Tabs/Tabs.vue +0 -16
- package/src/components/Tabs/index.ts +0 -2
- package/src/components/Tag/README.md +0 -27
- package/src/components/Tag/Tag.vue +0 -45
- package/src/components/Tag/index.ts +0 -1
- package/src/components/TextField/README.md +0 -335
- package/src/components/TextField/TextField.vue +0 -135
- package/src/components/TextField/TextFieldIcon.vue +0 -19
- package/src/components/TextField/TextFieldPasswordIcon.vue +0 -28
- package/src/components/TextField/TextFieldSearchIcon.vue +0 -11
- package/src/components/TextField/index.ts +0 -1
- package/src/components/TextStyle/README.md +0 -39
- package/src/components/TextStyle/TextStyle.vue +0 -24
- package/src/components/TextStyle/index.ts +0 -1
- package/src/components/Toast/DismissToastAction.vue +0 -34
- package/src/components/Toast/README.md +0 -167
- package/src/components/Toast/Toast.vue +0 -39
- package/src/components/Toast/ToastGroup.vue +0 -9
- package/src/components/Toast/index.ts +0 -2
- package/src/components/Toggle/README.md +0 -66
- package/src/components/Toggle/Toggle.vue +0 -89
- package/src/components/Toggle/index.ts +0 -1
- package/src/components/Tooltip/README.md +0 -51
- package/src/components/Tooltip/Tooltip.vue +0 -24
- package/src/components/Tooltip/index.ts +0 -1
- package/src/components/TopBar/README.md +0 -43
- package/src/components/TopBar/TopBar.vue +0 -7
- package/src/components/TopBar/TopBarLogo.vue +0 -8
- package/src/components/TopBar/TopBarNavigation.vue +0 -7
- package/src/components/TopBar/TopBarNavigationItem.vue +0 -13
- package/src/components/TopBar/TopBarSearch.vue +0 -15
- package/src/components/TopBar/TopBarUserMenu.vue +0 -20
- package/src/components/TopBar/index.ts +0 -6
- package/src/components/VisuallyHidden/README.md +0 -19
- package/src/components/VisuallyHidden/VisuallyHidden.vue +0 -25
- package/src/components/VisuallyHidden/index.ts +0 -1
- package/src/components/index.ts +0 -197
- package/src/components/types.ts +0 -5
- package/src/composables/index.ts +0 -7
- package/src/composables/useTailwindColor.ts +0 -17
- package/src/composables/useTheme.ts +0 -41
- package/src/composables/useToastNotifications.ts +0 -55
- package/src/composables/useUniqueId.ts +0 -6
- package/src/index.css +0 -24
- package/src/index.ts +0 -1
- package/src/vite-env.d.ts +0 -1
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { useUniqueId } from '../../composables';
|
|
3
|
-
import { onMounted, provide, ref } from 'vue';
|
|
4
|
-
import { type ReferenceElement, computePosition, flip, shift, offset, Placement } from '@floating-ui/vue';
|
|
5
|
-
import { onClickOutside } from '@vueuse/core';
|
|
6
|
-
|
|
7
|
-
const props = defineProps<{
|
|
8
|
-
/** The trigger event of the popper */
|
|
9
|
-
trigger: 'click' | 'hover';
|
|
10
|
-
|
|
11
|
-
/** The placement of the popper */
|
|
12
|
-
placement: Placement;
|
|
13
|
-
}>();
|
|
14
|
-
|
|
15
|
-
const popperBodyId = useUniqueId('popperBody');
|
|
16
|
-
const popperTriggerId = useUniqueId('popperTrigger');
|
|
17
|
-
|
|
18
|
-
const popperBodyVisible = ref(false);
|
|
19
|
-
|
|
20
|
-
const $popperWrapper = ref<HTMLElement>()!;
|
|
21
|
-
const $popperTrigger = ref<HTMLElement>();
|
|
22
|
-
const $popperBody = ref<HTMLElement>();
|
|
23
|
-
|
|
24
|
-
provide('popperBodyId', popperBodyId);
|
|
25
|
-
provide('popperTriggerId', popperTriggerId);
|
|
26
|
-
provide('popperBodyVisible', popperBodyVisible);
|
|
27
|
-
|
|
28
|
-
function computePopperPosition(): void {
|
|
29
|
-
computePosition($popperTrigger.value as ReferenceElement, $popperBody.value!, {
|
|
30
|
-
placement: props.placement,
|
|
31
|
-
middleware: [
|
|
32
|
-
offset(6),
|
|
33
|
-
flip(),
|
|
34
|
-
shift({
|
|
35
|
-
padding: 5,
|
|
36
|
-
}),
|
|
37
|
-
],
|
|
38
|
-
}).then(({ x, y }: { x: number; y: number }): void => {
|
|
39
|
-
Object.assign($popperBody.value!.style, {
|
|
40
|
-
left: `${x}px`,
|
|
41
|
-
top: `${y}px`,
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function showPopperContent(): void {
|
|
47
|
-
popperBodyVisible.value = true;
|
|
48
|
-
|
|
49
|
-
computePopperPosition();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function hidePopperContent(): void {
|
|
53
|
-
popperBodyVisible.value = false;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function handleHoverPopper(): void {
|
|
57
|
-
$popperTrigger.value!.addEventListener('mouseenter', showPopperContent);
|
|
58
|
-
$popperTrigger.value!.addEventListener('mouseleave', hidePopperContent);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function handleClickPopper(): void {
|
|
62
|
-
$popperTrigger.value!.addEventListener('click', (): void => {
|
|
63
|
-
popperBodyVisible.value
|
|
64
|
-
? hidePopperContent()
|
|
65
|
-
: showPopperContent();
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
onMounted((): void => {
|
|
70
|
-
$popperTrigger.value = document.getElementById(popperTriggerId)!;
|
|
71
|
-
$popperBody.value = document.getElementById(popperBodyId)!;
|
|
72
|
-
|
|
73
|
-
onClickOutside($popperWrapper, (): void => {
|
|
74
|
-
hidePopperContent();
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
if (props.trigger === 'hover') {
|
|
78
|
-
handleHoverPopper();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (props.trigger === 'click') {
|
|
82
|
-
handleClickPopper();
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
</script>
|
|
86
|
-
|
|
87
|
-
<template>
|
|
88
|
-
<span ref="$popperWrapper">
|
|
89
|
-
<slot />
|
|
90
|
-
</span>
|
|
91
|
-
</template>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { inject } from 'vue';
|
|
3
|
-
|
|
4
|
-
const popperBodyId = inject<string>('popperBodyId');
|
|
5
|
-
const popperBodyVisible = inject<boolean>('popperBodyVisible');
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<template>
|
|
9
|
-
<div
|
|
10
|
-
:id="popperBodyId"
|
|
11
|
-
class="absolute"
|
|
12
|
-
:class="{
|
|
13
|
-
'hidden': !popperBodyVisible,
|
|
14
|
-
'block': popperBodyVisible,
|
|
15
|
-
}"
|
|
16
|
-
>
|
|
17
|
-
<slot />
|
|
18
|
-
</div>
|
|
19
|
-
</template>
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import {
|
|
3
|
-
Button,
|
|
4
|
-
PopperBody,
|
|
5
|
-
Popper,
|
|
6
|
-
PopperTrigger,
|
|
7
|
-
} from '../../src/components';
|
|
8
|
-
import api from '../component-meta/Popper.json';
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
# Popper (internal)
|
|
12
|
-
|
|
13
|
-
This component is used to create a popper component that can be triggered by a click or hover event. The popper component
|
|
14
|
-
is used for components like tooltips, dropdowns, and popovers.
|
|
15
|
-
|
|
16
|
-
<ComponentApi :api="api" />
|
|
17
|
-
|
|
18
|
-
## Click
|
|
19
|
-
|
|
20
|
-
<ComponentWrapper>
|
|
21
|
-
<Popper trigger="click">
|
|
22
|
-
<PopperTrigger>
|
|
23
|
-
<Button>Popper trigger</Button>
|
|
24
|
-
</PopperTrigger>
|
|
25
|
-
<PopperBody>
|
|
26
|
-
Tooltip
|
|
27
|
-
</PopperBody>
|
|
28
|
-
</Popper>
|
|
29
|
-
</ComponentWrapper>
|
|
30
|
-
|
|
31
|
-
## Hover
|
|
32
|
-
|
|
33
|
-
<ComponentWrapper>
|
|
34
|
-
<Popper trigger="hover">
|
|
35
|
-
<PopperTrigger>
|
|
36
|
-
<Button>Popper trigger</Button>
|
|
37
|
-
</PopperTrigger>
|
|
38
|
-
<PopperBody>
|
|
39
|
-
Tooltip
|
|
40
|
-
</PopperBody>
|
|
41
|
-
</Popper>
|
|
42
|
-
</ComponentWrapper>
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { VisuallyHidden } from '../VisuallyHidden';
|
|
3
|
-
import { TailwindColor, useTailwindColor } from '../../composables';
|
|
4
|
-
import { computed } from 'vue';
|
|
5
|
-
|
|
6
|
-
const props = withDefaults(defineProps<{
|
|
7
|
-
/** The color of the progress-bar. */
|
|
8
|
-
color?: TailwindColor;
|
|
9
|
-
|
|
10
|
-
/** The value of the progress bar. */
|
|
11
|
-
value: number;
|
|
12
|
-
|
|
13
|
-
/** The position of the indicator relative to the progress bar. */
|
|
14
|
-
indicatorPosition?: 'above' | 'below' | null;
|
|
15
|
-
}>(), {
|
|
16
|
-
color: 'slate',
|
|
17
|
-
indicatorPosition: null,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
const foregroundColor = computed((): string => {
|
|
21
|
-
return useTailwindColor(props.color, '500');
|
|
22
|
-
});
|
|
23
|
-
</script>
|
|
24
|
-
|
|
25
|
-
<template>
|
|
26
|
-
<div
|
|
27
|
-
class="space-y-2"
|
|
28
|
-
role="progressbar"
|
|
29
|
-
>
|
|
30
|
-
<slot v-if="!!$slots.default && indicatorPosition === 'above'" />
|
|
31
|
-
|
|
32
|
-
<VisuallyHidden>
|
|
33
|
-
<progress
|
|
34
|
-
:value="value"
|
|
35
|
-
max="100"
|
|
36
|
-
/>
|
|
37
|
-
</VisuallyHidden>
|
|
38
|
-
|
|
39
|
-
<div class="bg-slate-300 rounded h-2 overflow-hidden">
|
|
40
|
-
<div
|
|
41
|
-
class="h-full rounded"
|
|
42
|
-
:style="{
|
|
43
|
-
width: `${value}%`,
|
|
44
|
-
backgroundColor: foregroundColor,
|
|
45
|
-
}"
|
|
46
|
-
/>
|
|
47
|
-
</div>
|
|
48
|
-
|
|
49
|
-
<slot v-if="!!$slots.default && indicatorPosition === 'below'" />
|
|
50
|
-
</div>
|
|
51
|
-
</template>
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { ProgressBar, ProgressBarIndicator } from '../../src/components';
|
|
3
|
-
import api from '../component-meta/ProgressBar.json';
|
|
4
|
-
</script>
|
|
5
|
-
|
|
6
|
-
# Progress bar
|
|
7
|
-
|
|
8
|
-
The progress component is used to visually represent the completion of a task or operation. It shows how much of the
|
|
9
|
-
task has been completed and how much is still left.
|
|
10
|
-
|
|
11
|
-
<ComponentApi :api="api" />
|
|
12
|
-
|
|
13
|
-
## Usage
|
|
14
|
-
|
|
15
|
-
<ComponentWrapper>
|
|
16
|
-
<ProgressBar :value="33" />
|
|
17
|
-
</ComponentWrapper>
|
|
18
|
-
|
|
19
|
-
```js-vue
|
|
20
|
-
<script lang="ts" setup>
|
|
21
|
-
import { ProgressBar } from 'focus-ui';
|
|
22
|
-
</script>
|
|
23
|
-
|
|
24
|
-
<template>
|
|
25
|
-
<ProgressBar :value="33" />
|
|
26
|
-
</template>
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### With progress indicator above
|
|
30
|
-
|
|
31
|
-
Using the `indicator-position` prop, you can position the progress indicator above or below the progress bar.
|
|
32
|
-
|
|
33
|
-
<ComponentWrapper>
|
|
34
|
-
<ProgressBar :value="33" indicator-position="above">
|
|
35
|
-
<ProgressBarIndicator align="right">33% completed</ProgressBarIndicator>
|
|
36
|
-
</ProgressBar>
|
|
37
|
-
</ComponentWrapper>
|
|
38
|
-
|
|
39
|
-
```js-vue
|
|
40
|
-
<script lang="ts" setup>
|
|
41
|
-
import { ProgressBar, ProgressBarIndicator } from 'focus-ui';
|
|
42
|
-
</script>
|
|
43
|
-
|
|
44
|
-
<template>
|
|
45
|
-
<ProgressBar :value="33" indicator-position="above">
|
|
46
|
-
<ProgressBarIndicator align="right">33% completed</ProgressBarIndicator>
|
|
47
|
-
</ProgressBar>
|
|
48
|
-
</template>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### With progress indicator below
|
|
52
|
-
|
|
53
|
-
<ComponentWrapper>
|
|
54
|
-
<ProgressBar :value="33" indicator-position="below">
|
|
55
|
-
<ProgressBarIndicator align="right">33% completed</ProgressBarIndicator>
|
|
56
|
-
</ProgressBar>
|
|
57
|
-
</ComponentWrapper>
|
|
58
|
-
|
|
59
|
-
```js-vue
|
|
60
|
-
<script lang="ts" setup>
|
|
61
|
-
import { ProgressBar, ProgressBarIndicator } from 'focus-ui';
|
|
62
|
-
</script>
|
|
63
|
-
|
|
64
|
-
<template>
|
|
65
|
-
<ProgressBar :value="33" indicator-position="below">
|
|
66
|
-
<ProgressBarIndicator align="right">33% completed</ProgressBarIndicator>
|
|
67
|
-
</ProgressBar>
|
|
68
|
-
</template>
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Progress indicator alignment
|
|
72
|
-
|
|
73
|
-
Using the `align` prop, you can align the progress indicator to the left, center, or right.
|
|
74
|
-
|
|
75
|
-
<ComponentWrapper>
|
|
76
|
-
<ProgressBar :value="33" indicator-position="below">
|
|
77
|
-
<ProgressBarIndicator align="left">33% completed</ProgressBarIndicator>
|
|
78
|
-
</ProgressBar>
|
|
79
|
-
</ComponentWrapper>
|
|
80
|
-
|
|
81
|
-
```js-vue
|
|
82
|
-
<script lang="ts" setup>
|
|
83
|
-
import { ProgressBar, ProgressBarIndicator } from 'focus-ui';
|
|
84
|
-
</script>
|
|
85
|
-
|
|
86
|
-
<template>
|
|
87
|
-
<ProgressBar :value="33" indicator-position="below">
|
|
88
|
-
<ProgressBarIndicator align="left">33% completed</ProgressBarIndicator>
|
|
89
|
-
</ProgressBar>
|
|
90
|
-
</template>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Best practices
|
|
94
|
-
|
|
95
|
-
Progress components should:
|
|
96
|
-
|
|
97
|
-
- Give users an indication of how much of the task has completed and how much is left.
|
|
98
|
-
- Not be used for entire page loads. In this case, use the `Skeleton page` component.
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { FormLayout, RadioButton } from '../../src/components';
|
|
3
|
-
import api from '../component-meta/RadioButton.json';
|
|
4
|
-
import { ref } from "vue";
|
|
5
|
-
|
|
6
|
-
const test = ref<string | null>(null);
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
# Radio button
|
|
10
|
-
|
|
11
|
-
Use radio buttons to present each item in a list of options where users must make a single selection.
|
|
12
|
-
|
|
13
|
-
<ComponentApi :api="api" />
|
|
14
|
-
|
|
15
|
-
## Usage
|
|
16
|
-
|
|
17
|
-
<ComponentWrapper>
|
|
18
|
-
<FormLayout>
|
|
19
|
-
<RadioButton
|
|
20
|
-
v-model="test"
|
|
21
|
-
value="comments"
|
|
22
|
-
label="Comments"
|
|
23
|
-
help-text="Get notified when someones posts a comment on a posting." />
|
|
24
|
-
<RadioButton
|
|
25
|
-
v-model="test"
|
|
26
|
-
value="candidates"
|
|
27
|
-
label="Candidates"
|
|
28
|
-
help-text="Get notified when a candidate applies for a job." />
|
|
29
|
-
<RadioButton
|
|
30
|
-
v-model="test"
|
|
31
|
-
value="offers"
|
|
32
|
-
label="Offers"
|
|
33
|
-
help-text="Get notified when a candidate accepts or rejects an offer." />
|
|
34
|
-
</FormLayout>
|
|
35
|
-
<pre class="mt-4">{{ test }}</pre>
|
|
36
|
-
</ComponentWrapper>
|
|
37
|
-
|
|
38
|
-
```js-vue
|
|
39
|
-
<script lang="ts" setup>
|
|
40
|
-
import { RadioButton } from '@returnless/focus-ui';
|
|
41
|
-
|
|
42
|
-
const radioButtonModel = ref<string | null>(null);
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<template>
|
|
46
|
-
<FormLayout>
|
|
47
|
-
<RadioButton
|
|
48
|
-
v-model="radioButtonModel"
|
|
49
|
-
value="comments"
|
|
50
|
-
label="Comments"
|
|
51
|
-
help-text="Get notified when someones posts a comment on a posting." />
|
|
52
|
-
<RadioButton
|
|
53
|
-
v-model="radioButtonModel"
|
|
54
|
-
value="candidates"
|
|
55
|
-
label="Candidates"
|
|
56
|
-
help-text="Get notified when a candidate applies for a job." />
|
|
57
|
-
<RadioButton
|
|
58
|
-
v-model="radioButtonModel"
|
|
59
|
-
value="offers"
|
|
60
|
-
label="Offers"
|
|
61
|
-
help-text="Get notified when a candidate accepts or rejects an offer." />
|
|
62
|
-
</FormLayout>
|
|
63
|
-
<pre class="mt-4">{{ radioButtonModel }}</pre>
|
|
64
|
-
</template>
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Best practices
|
|
68
|
-
|
|
69
|
-
Radio buttons should:
|
|
70
|
-
|
|
71
|
-
- Always be used with an associated label component.
|
|
72
|
-
- Be part of list of radio buttons that:
|
|
73
|
-
- Include at least two or more choices.
|
|
74
|
-
- Are used to have users select only one option from a list of options.
|
|
75
|
-
- Include mutually exclusive options - this means that each option must be independent of every other option in the
|
|
76
|
-
list. For example: Red, Blue, Green, and Yellow are mutually exclusive. Read, blue, yellow, red/blue are not
|
|
77
|
-
mutually exclusive.
|
|
78
|
-
- List options in a rational order that makes logical sense.
|
|
79
|
-
- Have a default option selected whenever possible.
|
|
80
|
-
|
|
81
|
-
## Content guidelines
|
|
82
|
-
|
|
83
|
-
### Radio button labels
|
|
84
|
-
|
|
85
|
-
Radio button labels should:
|
|
86
|
-
|
|
87
|
-
- Be introduced with a colon or a heading.
|
|
88
|
-
- Start with a capital letter.
|
|
89
|
-
- Not end in punctuation if it's a single sentence, word, or a fragment.
|
|
90
|
-
|
|
91
|
-
## Accessibility
|
|
92
|
-
|
|
93
|
-
Screen readers convey the state of the radio button automatically.
|
|
94
|
-
|
|
95
|
-
- Use the `disabled` prop to apply the HTML `disabled` attribute to the radio button `<input>`. This prevents users
|
|
96
|
-
from being able to interact with the radio button, and conveys its inactive state to assistive technologies.
|
|
97
|
-
- Use the `id` prop to provide a unique `id` attribute value for the radio button. If an `id` isn't provided, then
|
|
98
|
-
the component generates one. All radio buttons must have unique `id` values to work correctly with assistive
|
|
99
|
-
technologies.
|
|
100
|
-
|
|
101
|
-
### Labelling
|
|
102
|
-
|
|
103
|
-
- The required `label` prop conveys the purpose of the radio button to all users.
|
|
104
|
-
- Use the `labelHidden` prop to visually hide the label but make it available to assistive technologies.
|
|
105
|
-
- When you provide help text via the `helpText` prop or an inline error message via the `error` prop, the help or
|
|
106
|
-
error content is conveyed to screen reader users with the `aria-describedBy` attribute.
|
|
107
|
-
|
|
108
|
-
### Keyboard support
|
|
109
|
-
|
|
110
|
-
- Move focus to the radio button group using the tab key (or shift + tab when tabbing backwards).
|
|
111
|
-
- Use the up and down arrow keys to change which radio button is selected.
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { InputLabel } from '../InputLabel';
|
|
3
|
-
import { useTheme, useUniqueId } from '../../composables';
|
|
4
|
-
import { TextStyle } from '../TextStyle';
|
|
5
|
-
|
|
6
|
-
const props = withDefaults(defineProps<{
|
|
7
|
-
/** The help text to display with the radioButton. */
|
|
8
|
-
helpText?: string | null;
|
|
9
|
-
|
|
10
|
-
/** The ID of the radioButton. */
|
|
11
|
-
id?: string | null;
|
|
12
|
-
|
|
13
|
-
/** The label for the radioButton. */
|
|
14
|
-
label: string;
|
|
15
|
-
|
|
16
|
-
/** The value of the radioButton. */
|
|
17
|
-
value: any;
|
|
18
|
-
}>(), {
|
|
19
|
-
id: null,
|
|
20
|
-
helpText: null,
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
const model = defineModel<boolean>();
|
|
24
|
-
|
|
25
|
-
const elementId = props.id || useUniqueId('radioButton');
|
|
26
|
-
</script>
|
|
27
|
-
|
|
28
|
-
<template>
|
|
29
|
-
<div class="flex items-start space-x-2">
|
|
30
|
-
<input
|
|
31
|
-
:id="elementId"
|
|
32
|
-
v-model="model"
|
|
33
|
-
:class="useTheme('focus')"
|
|
34
|
-
:value="value"
|
|
35
|
-
class="h-4 w-4 flex-shrink-0 appearance-none rounded-full border border-slate-400 bg-white shadow-sm text-brand-500"
|
|
36
|
-
type="radio"
|
|
37
|
-
>
|
|
38
|
-
<div class="-mt-[2px] space-y-1">
|
|
39
|
-
<InputLabel
|
|
40
|
-
:label="label"
|
|
41
|
-
:label-for="elementId"
|
|
42
|
-
/>
|
|
43
|
-
|
|
44
|
-
<TextStyle variant="subdued">
|
|
45
|
-
{{ helpText }}
|
|
46
|
-
</TextStyle>
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
</template>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as RadioButton } from './RadioButton.vue';
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import {
|
|
3
|
-
Avatar,
|
|
4
|
-
Button,
|
|
5
|
-
Card,
|
|
6
|
-
CardSection,
|
|
7
|
-
CardHelp,
|
|
8
|
-
CardHeader,
|
|
9
|
-
CardTitle,
|
|
10
|
-
CardFooter,
|
|
11
|
-
CardDescription,
|
|
12
|
-
ResourceList,
|
|
13
|
-
ResourceListItem,
|
|
14
|
-
ResourceListItemContent,
|
|
15
|
-
TextStyle,
|
|
16
|
-
StatusIndicator,
|
|
17
|
-
} from '../../src/components';
|
|
18
|
-
import api from '../component-meta/ResourceList.json';
|
|
19
|
-
</script>
|
|
20
|
-
|
|
21
|
-
# Resource List
|
|
22
|
-
|
|
23
|
-
A resource list displays a collection of objects of the same type, like products or customers. The main job of a
|
|
24
|
-
resource list is to help users find an object and navigate to a full-page representation of it or open a modal to
|
|
25
|
-
view more details.
|
|
26
|
-
|
|
27
|
-
<ComponentApi :api="api" />
|
|
28
|
-
|
|
29
|
-
## Examples
|
|
30
|
-
|
|
31
|
-
### List of available orders
|
|
32
|
-
|
|
33
|
-
<ComponentWrapper>
|
|
34
|
-
<div style="width: 400px;">
|
|
35
|
-
<Card>
|
|
36
|
-
<CardHeader>
|
|
37
|
-
<CardTitle>
|
|
38
|
-
Orders
|
|
39
|
-
<CardHelp href="/help">Learn more</CardHelp>
|
|
40
|
-
</CardTitle>
|
|
41
|
-
</CardHeader>
|
|
42
|
-
<CardSection flush>
|
|
43
|
-
<ResourceList>
|
|
44
|
-
<ResourceListItem>
|
|
45
|
-
<Avatar
|
|
46
|
-
initials="Shopify"
|
|
47
|
-
size="md"
|
|
48
|
-
source="https://assets.returnless.co/f905e00c-366c-45be-9114-65d29e832027/img/integrations/shopify-plus-logo.svg"
|
|
49
|
-
/>
|
|
50
|
-
<ResourceListItemContent>
|
|
51
|
-
<TextStyle variant="strong">
|
|
52
|
-
6246980452684
|
|
53
|
-
</TextStyle>
|
|
54
|
-
<p>
|
|
55
|
-
<TextStyle variant="subdued">
|
|
56
|
-
2024-06-23 10:11:12
|
|
57
|
-
</TextStyle>
|
|
58
|
-
</p>
|
|
59
|
-
</ResourceListItemContent>
|
|
60
|
-
</ResourceListItem>
|
|
61
|
-
<ResourceListItem>
|
|
62
|
-
<Avatar
|
|
63
|
-
initials="WICS"
|
|
64
|
-
size="md"
|
|
65
|
-
source="https://assets.returnless.co/f905e00c-366c-45be-9114-65d29e832027/img/integrations/shopify-logo.svg"
|
|
66
|
-
/>
|
|
67
|
-
<ResourceListItemContent>
|
|
68
|
-
<TextStyle variant="strong">
|
|
69
|
-
1273329
|
|
70
|
-
</TextStyle>
|
|
71
|
-
<p>
|
|
72
|
-
<TextStyle variant="subdued">
|
|
73
|
-
2024-06-23 10:11:12
|
|
74
|
-
</TextStyle>
|
|
75
|
-
</p>
|
|
76
|
-
</ResourceListItemContent>
|
|
77
|
-
</ResourceListItem>
|
|
78
|
-
</ResourceList>
|
|
79
|
-
</CardSection>
|
|
80
|
-
</Card>
|
|
81
|
-
</div>
|
|
82
|
-
</ComponentWrapper>
|
|
83
|
-
|
|
84
|
-
### List of active shipments
|
|
85
|
-
|
|
86
|
-
<ComponentWrapper>
|
|
87
|
-
<div style="width: 400px;">
|
|
88
|
-
<Card>
|
|
89
|
-
<CardHeader>
|
|
90
|
-
<CardTitle>
|
|
91
|
-
Shipments
|
|
92
|
-
<CardHelp href="/help">Learn more</CardHelp>
|
|
93
|
-
</CardTitle>
|
|
94
|
-
</CardHeader>
|
|
95
|
-
<CardSection flush>
|
|
96
|
-
<ResourceList>
|
|
97
|
-
<ResourceListItem>
|
|
98
|
-
<Avatar
|
|
99
|
-
initials="DHL"
|
|
100
|
-
size="md"
|
|
101
|
-
source="https://assets.returnless.co/f905e00c-366c-45be-9114-65d29e832027/img/carriers/dhl.svg"
|
|
102
|
-
/>
|
|
103
|
-
<ResourceListItemContent>
|
|
104
|
-
<StatusIndicator color="slate">Announced</StatusIndicator>
|
|
105
|
-
<p class="text-xs">
|
|
106
|
-
<TextStyle variant="subdued">
|
|
107
|
-
DHLForYou Drop Off
|
|
108
|
-
</TextStyle>
|
|
109
|
-
</p>
|
|
110
|
-
</ResourceListItemContent>
|
|
111
|
-
</ResourceListItem>
|
|
112
|
-
<ResourceListItem>
|
|
113
|
-
<Avatar
|
|
114
|
-
initials="DHL"
|
|
115
|
-
size="md"
|
|
116
|
-
source="https://assets.returnless.co/f905e00c-366c-45be-9114-65d29e832027/img/carriers/dhl.svg"
|
|
117
|
-
/>
|
|
118
|
-
<ResourceListItemContent>
|
|
119
|
-
<StatusIndicator color="blue">En-route</StatusIndicator>
|
|
120
|
-
<p class="text-xs">
|
|
121
|
-
<TextStyle variant="subdued">
|
|
122
|
-
DHLForYou Drop Off
|
|
123
|
-
</TextStyle>
|
|
124
|
-
</p>
|
|
125
|
-
</ResourceListItemContent>
|
|
126
|
-
</ResourceListItem>
|
|
127
|
-
<ResourceListItem>
|
|
128
|
-
<Avatar
|
|
129
|
-
initials="DHL"
|
|
130
|
-
size="md"
|
|
131
|
-
source="https://assets.returnless.co/f905e00c-366c-45be-9114-65d29e832027/img/carriers/dhl.svg"
|
|
132
|
-
/>
|
|
133
|
-
<ResourceListItemContent>
|
|
134
|
-
<StatusIndicator color="green">Dropped-off</StatusIndicator>
|
|
135
|
-
<p class="text-xs">
|
|
136
|
-
<TextStyle variant="subdued">
|
|
137
|
-
DHLForYou Drop Off
|
|
138
|
-
</TextStyle>
|
|
139
|
-
</p>
|
|
140
|
-
</ResourceListItemContent>
|
|
141
|
-
</ResourceListItem>
|
|
142
|
-
</ResourceList>
|
|
143
|
-
</CardSection>
|
|
144
|
-
<CardFooter>
|
|
145
|
-
<Button variant="secondary">Create new shipment</Button>
|
|
146
|
-
</CardFooter>
|
|
147
|
-
</Card>
|
|
148
|
-
</div>
|
|
149
|
-
</ComponentWrapper>
|
|
150
|
-
|
|
151
|
-
## Best practices
|
|
152
|
-
|
|
153
|
-
Resource list can live in many places in Returnless. You could include a short resource list in a card summarizing
|
|
154
|
-
recent orders, or you could also dedicate a full page to a resource list of all orders. Here are some best practices:
|
|
155
|
-
|
|
156
|
-
Resource lists should:
|
|
157
|
-
|
|
158
|
-
- Have items that perform an action when clicked. The action should navigate to the resource's details page or
|
|
159
|
-
otherwise provide more detail about the item.
|
|
160
|
-
- Customize the content and layout of their ist items to support users' needs.
|