@krizaka/ui 3.3.0 → 3.4.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/activity-feed.d.ts +199 -0
- package/dist/activity-feed.js +155 -0
- package/dist/activity-feed.js.map +1 -0
- package/dist/argument-card.js +3 -3
- package/dist/chunk-7Z4KHPFC.js +42 -0
- package/dist/chunk-7Z4KHPFC.js.map +1 -0
- package/dist/data-table.js +98 -131
- package/dist/data-table.js.map +1 -1
- package/dist/description-list.d.ts +105 -0
- package/dist/description-list.js +49 -0
- package/dist/description-list.js.map +1 -0
- package/dist/index.js +13 -66
- package/dist/index.js.map +1 -1
- package/dist/kanban.d.ts +132 -0
- package/dist/kanban.js +187 -0
- package/dist/kanban.js.map +1 -0
- package/dist/list.d.ts +153 -0
- package/dist/list.js +130 -0
- package/dist/list.js.map +1 -0
- package/dist/map.d.ts +463 -0
- package/dist/map.js +952 -0
- package/dist/map.js.map +1 -0
- package/dist/motion.css +12 -1
- package/dist/native/map.d.ts +200 -0
- package/dist/native/map.js +673 -0
- package/dist/native/map.js.map +1 -0
- package/dist/native/media-picker.d.ts +58 -0
- package/dist/native/media-picker.js +63 -0
- package/dist/native/media-picker.js.map +1 -0
- package/dist/native.d.ts +568 -6
- package/dist/native.js +1989 -868
- package/dist/native.js.map +1 -1
- package/dist/page-hero.js +3 -3
- package/dist/stat.d.ts +31 -2
- package/dist/stat.js +21 -4
- package/dist/stat.js.map +1 -1
- package/dist/tree-view.d.ts +111 -0
- package/dist/tree-view.js +154 -0
- package/dist/tree-view.js.map +1 -0
- package/package.json +147 -10
- package/registry/achievement.json +1 -1
- package/registry/action-bar.json +1 -1
- package/registry/action-sheet.json +121 -0
- package/registry/activity-feed.json +468 -0
- package/registry/alert.json +1 -1
- package/registry/app-shell.json +1 -1
- package/registry/argument-card.json +1 -1
- package/registry/audio-player.json +1 -1
- package/registry/auth-layout.json +1 -1
- package/registry/avatar.json +58 -3
- package/registry/badge.json +1 -1
- package/registry/button.json +1 -1
- package/registry/card-grid.json +1 -1
- package/registry/card.json +1 -1
- package/registry/catalogue-page.json +1 -1
- package/registry/changelog-page.json +1 -1
- package/registry/checkbox.json +1 -1
- package/registry/chip-link.json +1 -1
- package/registry/chip.json +1 -1
- package/registry/choice-grid.json +1 -1
- package/registry/code-block.json +1 -1
- package/registry/combobox.json +1 -1
- package/registry/command.json +1 -1
- package/registry/component-page.json +1 -1
- package/registry/confirm-button.json +1 -1
- package/registry/contact-page.json +1 -1
- package/registry/continue-prompt.json +1 -1
- package/registry/countdown.json +1 -1
- package/registry/cta-panel.json +1 -1
- package/registry/dashboard-layout.json +1 -1
- package/registry/data-table.json +1 -1
- package/registry/date-picker.json +2 -2
- package/registry/decision-list.json +1 -1
- package/registry/description-list.json +232 -0
- package/registry/detail-layout.json +1 -1
- package/registry/dialog.json +1 -1
- package/registry/docs-article-page.json +1 -1
- package/registry/docs-hub-page.json +1 -1
- package/registry/docs-layout.json +1 -1
- package/registry/dropdown-menu.json +1 -1
- package/registry/empty-state.json +1 -1
- package/registry/error-page.json +1 -1
- package/registry/examples/action-sheet/native/video-actions.d.ts +4 -0
- package/registry/examples/action-sheet/native/video-actions.dark.png +0 -0
- package/registry/examples/action-sheet/native/video-actions.js +30 -0
- package/registry/examples/action-sheet/native/video-actions.light.png +0 -0
- package/registry/examples/action-sheet/native/video-actions.tsx +24 -0
- package/registry/examples/activity-feed/job-activity.d.ts +4 -0
- package/registry/examples/activity-feed/job-activity.js +21 -0
- package/registry/examples/activity-feed/job-activity.tsx +17 -0
- package/registry/examples/activity-feed/live.d.ts +4 -0
- package/registry/examples/activity-feed/live.js +23 -0
- package/registry/examples/activity-feed/live.tsx +24 -0
- package/registry/examples/activity-feed/native/notifications.d.ts +4 -0
- package/registry/examples/activity-feed/native/notifications.dark.png +0 -0
- package/registry/examples/activity-feed/native/notifications.js +18 -0
- package/registry/examples/activity-feed/native/notifications.light.png +0 -0
- package/registry/examples/activity-feed/native/notifications.tsx +18 -0
- package/registry/examples/activity-feed/timeline.d.ts +4 -0
- package/registry/examples/activity-feed/timeline.js +25 -0
- package/registry/examples/activity-feed/timeline.tsx +19 -0
- package/registry/examples/avatar/native/presence.d.ts +4 -0
- package/registry/examples/avatar/native/presence.dark.png +0 -0
- package/registry/examples/avatar/native/presence.js +18 -0
- package/registry/examples/avatar/native/presence.light.png +0 -0
- package/registry/examples/avatar/native/presence.tsx +15 -0
- package/registry/examples/description-list/job-details.d.ts +4 -0
- package/registry/examples/description-list/job-details.js +23 -0
- package/registry/examples/description-list/job-details.tsx +17 -0
- package/registry/examples/description-list/key-value-grid.d.ts +4 -0
- package/registry/examples/description-list/key-value-grid.js +22 -0
- package/registry/examples/description-list/key-value-grid.tsx +16 -0
- package/registry/examples/description-list/native/job-details.d.ts +4 -0
- package/registry/examples/description-list/native/job-details.dark.png +0 -0
- package/registry/examples/description-list/native/job-details.js +33 -0
- package/registry/examples/description-list/native/job-details.light.png +0 -0
- package/registry/examples/description-list/native/job-details.tsx +24 -0
- package/registry/examples/description-list/receipt.d.ts +4 -0
- package/registry/examples/description-list/receipt.js +23 -0
- package/registry/examples/description-list/receipt.tsx +17 -0
- package/registry/examples/fab/native/extended.d.ts +4 -0
- package/registry/examples/fab/native/extended.dark.png +0 -0
- package/registry/examples/fab/native/extended.js +18 -0
- package/registry/examples/fab/native/extended.light.png +0 -0
- package/registry/examples/fab/native/extended.tsx +23 -0
- package/registry/examples/header/native/large-title.d.ts +4 -0
- package/registry/examples/header/native/large-title.dark.png +0 -0
- package/registry/examples/header/native/large-title.js +23 -0
- package/registry/examples/header/native/large-title.light.png +0 -0
- package/registry/examples/header/native/large-title.tsx +31 -0
- package/registry/examples/image-viewer/native/gallery.d.ts +4 -0
- package/registry/examples/image-viewer/native/gallery.dark.png +0 -0
- package/registry/examples/image-viewer/native/gallery.js +22 -0
- package/registry/examples/image-viewer/native/gallery.light.png +0 -0
- package/registry/examples/image-viewer/native/gallery.tsx +21 -0
- package/registry/examples/kanban/moderation.d.ts +4 -0
- package/registry/examples/kanban/moderation.js +35 -0
- package/registry/examples/kanban/moderation.tsx +37 -0
- package/registry/examples/list/jobs.d.ts +4 -0
- package/registry/examples/list/jobs.js +35 -0
- package/registry/examples/list/jobs.tsx +33 -0
- package/registry/examples/list/selectable.d.ts +4 -0
- package/registry/examples/list/selectable.js +33 -0
- package/registry/examples/list/selectable.tsx +30 -0
- package/registry/examples/list/virtualized.d.ts +4 -0
- package/registry/examples/list/virtualized.js +22 -0
- package/registry/examples/list/virtualized.tsx +17 -0
- package/registry/examples/loader/native/block.d.ts +4 -0
- package/registry/examples/loader/native/block.dark.png +0 -0
- package/registry/examples/loader/native/block.js +12 -0
- package/registry/examples/loader/native/block.light.png +0 -0
- package/registry/examples/loader/native/block.tsx +11 -0
- package/registry/examples/loader/native/job-wait.d.ts +4 -0
- package/registry/examples/loader/native/job-wait.dark.png +0 -0
- package/registry/examples/loader/native/job-wait.js +17 -0
- package/registry/examples/loader/native/job-wait.light.png +0 -0
- package/registry/examples/loader/native/job-wait.tsx +14 -0
- package/registry/examples/map/cluster.d.ts +4 -0
- package/registry/examples/map/cluster.js +16 -0
- package/registry/examples/map/cluster.tsx +18 -0
- package/registry/examples/map/location-picker.d.ts +4 -0
- package/registry/examples/map/location-picker.js +24 -0
- package/registry/examples/map/location-picker.tsx +22 -0
- package/registry/examples/map/native/location-picker.d.ts +4 -0
- package/registry/examples/map/native/location-picker.dark.png +0 -0
- package/registry/examples/map/native/location-picker.js +14 -0
- package/registry/examples/map/native/location-picker.light.png +0 -0
- package/registry/examples/map/native/location-picker.tsx +13 -0
- package/registry/examples/map/native/places.d.ts +4 -0
- package/registry/examples/map/native/places.dark.png +0 -0
- package/registry/examples/map/native/places.js +25 -0
- package/registry/examples/map/native/places.light.png +0 -0
- package/registry/examples/map/native/places.tsx +27 -0
- package/registry/examples/map/places.d.ts +4 -0
- package/registry/examples/map/places.js +28 -0
- package/registry/examples/map/places.tsx +28 -0
- package/registry/examples/map/static.d.ts +4 -0
- package/registry/examples/map/static.js +22 -0
- package/registry/examples/map/static.tsx +18 -0
- package/registry/examples/media-picker/native/story.d.ts +4 -0
- package/registry/examples/media-picker/native/story.dark.png +0 -0
- package/registry/examples/media-picker/native/story.js +30 -0
- package/registry/examples/media-picker/native/story.light.png +0 -0
- package/registry/examples/media-picker/native/story.tsx +26 -0
- package/registry/examples/meter/native/credits.d.ts +4 -0
- package/registry/examples/meter/native/credits.dark.png +0 -0
- package/registry/examples/meter/native/credits.js +15 -0
- package/registry/examples/meter/native/credits.light.png +0 -0
- package/registry/examples/meter/native/credits.tsx +12 -0
- package/registry/examples/meter/native/split-ring.d.ts +4 -0
- package/registry/examples/meter/native/split-ring.dark.png +0 -0
- package/registry/examples/meter/native/split-ring.js +24 -0
- package/registry/examples/meter/native/split-ring.light.png +0 -0
- package/registry/examples/meter/native/split-ring.tsx +19 -0
- package/registry/examples/number-ticker/native/balance.d.ts +4 -0
- package/registry/examples/number-ticker/native/balance.dark.png +0 -0
- package/registry/examples/number-ticker/native/balance.js +18 -0
- package/registry/examples/number-ticker/native/balance.light.png +0 -0
- package/registry/examples/number-ticker/native/balance.tsx +17 -0
- package/registry/examples/onboarding/native/first-launch.d.ts +4 -0
- package/registry/examples/onboarding/native/first-launch.dark.png +0 -0
- package/registry/examples/onboarding/native/first-launch.js +23 -0
- package/registry/examples/onboarding/native/first-launch.light.png +0 -0
- package/registry/examples/onboarding/native/first-launch.tsx +19 -0
- package/registry/examples/otp-input/native/invalid.d.ts +4 -0
- package/registry/examples/otp-input/native/invalid.dark.png +0 -0
- package/registry/examples/otp-input/native/invalid.js +15 -0
- package/registry/examples/otp-input/native/invalid.light.png +0 -0
- package/registry/examples/otp-input/native/invalid.tsx +14 -0
- package/registry/examples/otp-input/native/verify.d.ts +4 -0
- package/registry/examples/otp-input/native/verify.dark.png +0 -0
- package/registry/examples/otp-input/native/verify.js +17 -0
- package/registry/examples/otp-input/native/verify.light.png +0 -0
- package/registry/examples/otp-input/native/verify.tsx +14 -0
- package/registry/examples/permission-prompt/native/blocked.d.ts +4 -0
- package/registry/examples/permission-prompt/native/blocked.dark.png +0 -0
- package/registry/examples/permission-prompt/native/blocked.js +25 -0
- package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
- package/registry/examples/permission-prompt/native/blocked.tsx +21 -0
- package/registry/examples/permission-prompt/native/camera.d.ts +4 -0
- package/registry/examples/permission-prompt/native/camera.dark.png +0 -0
- package/registry/examples/permission-prompt/native/camera.js +25 -0
- package/registry/examples/permission-prompt/native/camera.light.png +0 -0
- package/registry/examples/permission-prompt/native/camera.tsx +21 -0
- package/registry/examples/pull-to-refresh/native/feed.d.ts +4 -0
- package/registry/examples/pull-to-refresh/native/feed.dark.png +0 -0
- package/registry/examples/pull-to-refresh/native/feed.js +14 -0
- package/registry/examples/pull-to-refresh/native/feed.light.png +0 -0
- package/registry/examples/pull-to-refresh/native/feed.tsx +19 -0
- package/registry/examples/search-field/native/cancel.d.ts +4 -0
- package/registry/examples/search-field/native/cancel.dark.png +0 -0
- package/registry/examples/search-field/native/cancel.js +14 -0
- package/registry/examples/search-field/native/cancel.light.png +0 -0
- package/registry/examples/search-field/native/cancel.tsx +13 -0
- package/registry/examples/stat/grid.d.ts +4 -0
- package/registry/examples/stat/grid.js +17 -0
- package/registry/examples/stat/grid.tsx +14 -0
- package/registry/examples/stepper/native/run.d.ts +4 -0
- package/registry/examples/stepper/native/run.dark.png +0 -0
- package/registry/examples/stepper/native/run.js +24 -0
- package/registry/examples/stepper/native/run.light.png +0 -0
- package/registry/examples/stepper/native/run.tsx +20 -0
- package/registry/examples/swipeable-row/native/conversation.d.ts +4 -0
- package/registry/examples/swipeable-row/native/conversation.dark.png +0 -0
- package/registry/examples/swipeable-row/native/conversation.js +30 -0
- package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
- package/registry/examples/swipeable-row/native/conversation.tsx +27 -0
- package/registry/examples/tab-bar/native/main-sections.d.ts +4 -0
- package/registry/examples/tab-bar/native/main-sections.dark.png +0 -0
- package/registry/examples/tab-bar/native/main-sections.js +29 -0
- package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
- package/registry/examples/tab-bar/native/main-sections.tsx +30 -0
- package/registry/examples/tabs/native/sections.d.ts +4 -0
- package/registry/examples/tabs/native/sections.dark.png +0 -0
- package/registry/examples/tabs/native/sections.js +23 -0
- package/registry/examples/tabs/native/sections.light.png +0 -0
- package/registry/examples/tabs/native/sections.tsx +19 -0
- package/registry/examples/tabs/native/segmented.d.ts +4 -0
- package/registry/examples/tabs/native/segmented.dark.png +0 -0
- package/registry/examples/tabs/native/segmented.js +22 -0
- package/registry/examples/tabs/native/segmented.light.png +0 -0
- package/registry/examples/tabs/native/segmented.tsx +18 -0
- package/registry/examples/toast/native/snackbar.d.ts +4 -0
- package/registry/examples/toast/native/snackbar.dark.png +0 -0
- package/registry/examples/toast/native/snackbar.js +23 -0
- package/registry/examples/toast/native/snackbar.light.png +0 -0
- package/registry/examples/toast/native/snackbar.tsx +21 -0
- package/registry/examples/tree-view/docs.d.ts +4 -0
- package/registry/examples/tree-view/docs.js +24 -0
- package/registry/examples/tree-view/docs.tsx +22 -0
- package/registry/examples/tree-view/lazy.d.ts +4 -0
- package/registry/examples/tree-view/lazy.js +21 -0
- package/registry/examples/tree-view/lazy.tsx +19 -0
- package/registry/fab.json +122 -0
- package/registry/field.json +1 -1
- package/registry/file-upload.json +2 -2
- package/registry/filter-bar.json +1 -1
- package/registry/form.json +2 -2
- package/registry/gallery-page.json +1 -1
- package/registry/glow-card.json +1 -1
- package/registry/goal-gauge.json +1 -1
- package/registry/header.json +137 -0
- package/registry/how-it-works-page.json +1 -1
- package/registry/image-cropper.json +1 -1
- package/registry/image-viewer.json +107 -0
- package/registry/index.json +299 -25
- package/registry/iso.json +1 -1
- package/registry/kanban.json +253 -0
- package/registry/kbd.json +1 -1
- package/registry/landing-page.json +1 -1
- package/registry/landscape.json +1 -1
- package/registry/legal-page.json +1 -1
- package/registry/link-card.json +1 -1
- package/registry/list.json +367 -30
- package/registry/loader.json +157 -4
- package/registry/longform-page.json +1 -1
- package/registry/map.json +1368 -0
- package/registry/marketing-layout.json +1 -1
- package/registry/marquee.json +1 -1
- package/registry/mascot-quote.json +1 -1
- package/registry/mascot-state.json +1 -1
- package/registry/mascots.json +1 -1
- package/registry/media-capture.json +1 -1
- package/registry/media-picker.json +129 -0
- package/registry/meter.json +136 -4
- package/registry/nav-bar.json +1 -1
- package/registry/number-ticker.json +96 -4
- package/registry/onboarding.json +95 -0
- package/registry/otp-input.json +150 -0
- package/registry/page-header.json +1 -1
- package/registry/page-hero.json +1 -1
- package/registry/page.json +1 -1
- package/registry/pagination.json +1 -1
- package/registry/permission-prompt.json +172 -0
- package/registry/pointer-light.json +1 -1
- package/registry/popover.json +1 -1
- package/registry/pricing-page.json +1 -1
- package/registry/product-page.json +1 -1
- package/registry/profile-card.json +1 -1
- package/registry/progress.json +2 -2
- package/registry/promise-card.json +1 -1
- package/registry/pull-to-refresh.json +74 -0
- package/registry/radio-group.json +1 -1
- package/registry/scroll-stage.json +1 -1
- package/registry/search-field.json +30 -3
- package/registry/section-backdrop.json +1 -1
- package/registry/separator.json +1 -1
- package/registry/settings-layout.json +1 -1
- package/registry/skeleton.json +1 -1
- package/registry/slider.json +1 -1
- package/registry/slot.json +1 -1
- package/registry/spinner.json +1 -1
- package/registry/split-view.json +1 -1
- package/registry/stage-banner.json +1 -1
- package/registry/stat.json +68 -5
- package/registry/status-page.json +1 -1
- package/registry/stepper.json +75 -4
- package/registry/swipeable-row.json +124 -0
- package/registry/switch.json +1 -1
- package/registry/tab-bar.json +115 -0
- package/registry/tabs.json +94 -4
- package/registry/tag-input.json +1 -1
- package/registry/terminal-replay.json +1 -1
- package/registry/theme.json +8 -1
- package/registry/toast.json +17 -3
- package/registry/toc.json +1 -1
- package/registry/tooltip.json +1 -1
- package/registry/tree-view.json +291 -0
- package/registry/video-player.json +1 -1
- package/registry/video-trimmer.json +1 -1
- package/registry/virtual.json +1 -1
- package/skills/map/SKILL.md +35 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DescriptionList } from "@krizaka/ui/description-list";
|
|
2
|
+
|
|
3
|
+
// Inline: a tip's breakdown, read like a receipt.
|
|
4
|
+
export default function DescriptionListReceipt() {
|
|
5
|
+
return (
|
|
6
|
+
<DescriptionList
|
|
7
|
+
layout="inline"
|
|
8
|
+
className="max-w-sm"
|
|
9
|
+
items={[
|
|
10
|
+
{ term: "Tip from @mina", details: "$10.00" },
|
|
11
|
+
{ term: "Payment fees", details: "−$0.50" },
|
|
12
|
+
{ term: "Platform", details: "−$1.00" },
|
|
13
|
+
{ term: "To you", details: "$8.50", hint: "paid on Oct 15" },
|
|
14
|
+
]}
|
|
15
|
+
/>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/fab/native/extended.tsx
|
|
4
|
+
import { Fab, useTheme } from "@krizaka/ui/native";
|
|
5
|
+
import { View } from "react-native";
|
|
6
|
+
import Svg, { Path } from "react-native-svg";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
function NativeFabExtended() {
|
|
9
|
+
const { theme } = useTheme();
|
|
10
|
+
const plus = /* @__PURE__ */ jsx(Svg, { width: 22, height: 22, viewBox: "0 0 24 24", stroke: theme.onAccent, strokeWidth: 2.4, strokeLinecap: "round", children: /* @__PURE__ */ jsx(Path, { d: "M12 5v14M5 12h14" }) });
|
|
11
|
+
return /* @__PURE__ */ jsxs(View, { style: { width: 360, height: 200, flexDirection: "row" }, children: [
|
|
12
|
+
/* @__PURE__ */ jsx(View, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(Fab, { label: "New challenge", icon: plus, extended: true, onPress: () => void 0 }) }),
|
|
13
|
+
/* @__PURE__ */ jsx(View, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(Fab, { label: "New challenge", icon: plus, onPress: () => void 0 }) })
|
|
14
|
+
] });
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
NativeFabExtended as default
|
|
18
|
+
};
|
|
Binary file
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Fab, useTheme } from "@krizaka/ui/native";
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
import Svg, { Path } from "react-native-svg";
|
|
4
|
+
|
|
5
|
+
// The screen's one main action, floating over the list, above the tab bar (`offset`).
|
|
6
|
+
export default function NativeFabExtended() {
|
|
7
|
+
const { theme } = useTheme();
|
|
8
|
+
const plus = (
|
|
9
|
+
<Svg width={22} height={22} viewBox="0 0 24 24" stroke={theme.onAccent} strokeWidth={2.4} strokeLinecap="round">
|
|
10
|
+
<Path d="M12 5v14M5 12h14" />
|
|
11
|
+
</Svg>
|
|
12
|
+
);
|
|
13
|
+
return (
|
|
14
|
+
<View style={{ width: 360, height: 200, flexDirection: "row" }}>
|
|
15
|
+
<View style={{ flex: 1 }}>
|
|
16
|
+
<Fab label="New challenge" icon={plus} extended onPress={() => undefined} />
|
|
17
|
+
</View>
|
|
18
|
+
<View style={{ flex: 1 }}>
|
|
19
|
+
<Fab label="New challenge" icon={plus} onPress={() => undefined} />
|
|
20
|
+
</View>
|
|
21
|
+
</View>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/header/native/large-title.tsx
|
|
4
|
+
import { Header, IconButton, SearchField, Txt, useCollapsingHeader, useTheme } from "@krizaka/ui/native";
|
|
5
|
+
import { Animated, View } from "react-native";
|
|
6
|
+
import Svg, { Path } from "react-native-svg";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
var DAYS = ["Today", "Yesterday", "Monday", "Sunday", "Saturday", "Friday", "Thursday"];
|
|
9
|
+
function NativeHeaderLargeTitle() {
|
|
10
|
+
const { scrollY, onScroll } = useCollapsingHeader();
|
|
11
|
+
const { theme } = useTheme();
|
|
12
|
+
const plus = /* @__PURE__ */ jsx(Svg, { width: 20, height: 20, viewBox: "0 0 24 24", stroke: theme.textPrimary, strokeWidth: 2.4, strokeLinecap: "round", children: /* @__PURE__ */ jsx(Path, { d: "M12 5v14M5 12h14" }) });
|
|
13
|
+
return /* @__PURE__ */ jsxs(View, { style: { width: 360, height: 420 }, children: [
|
|
14
|
+
/* @__PURE__ */ jsx(Header, { title: "Earnings", subtitle: "$1,990.40 this year", scrollY, actions: /* @__PURE__ */ jsx(IconButton, { label: "Withdraw", icon: plus, variant: "ghost" }), children: /* @__PURE__ */ jsx(SearchField, { label: "Search payouts", placeholder: "Search payouts", clearLabel: "Clear" }) }),
|
|
15
|
+
/* @__PURE__ */ jsx(Animated.ScrollView, { tabIndex: 0, onScroll, scrollEventThrottle: 16, children: DAYS.map((day) => /* @__PURE__ */ jsxs(View, { style: { flexDirection: "row", justifyContent: "space-between", paddingHorizontal: 16, paddingVertical: 14 }, children: [
|
|
16
|
+
/* @__PURE__ */ jsx(Txt, { variant: "label", children: `Tips \xB7 ${day}` }),
|
|
17
|
+
/* @__PURE__ */ jsx(Txt, { tone: "secondary", children: "$24.00" })
|
|
18
|
+
] }, day)) })
|
|
19
|
+
] });
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
NativeHeaderLargeTitle as default
|
|
23
|
+
};
|
|
Binary file
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Header, IconButton, SearchField, Txt, useCollapsingHeader, useTheme } from "@krizaka/ui/native";
|
|
2
|
+
import { Animated, View } from "react-native";
|
|
3
|
+
import Svg, { Path } from "react-native-svg";
|
|
4
|
+
|
|
5
|
+
const DAYS = ["Today", "Yesterday", "Monday", "Sunday", "Saturday", "Friday", "Thursday"];
|
|
6
|
+
|
|
7
|
+
// A large title that folds into the bar as the list scrolls under it.
|
|
8
|
+
export default function NativeHeaderLargeTitle() {
|
|
9
|
+
const { scrollY, onScroll } = useCollapsingHeader();
|
|
10
|
+
const { theme } = useTheme();
|
|
11
|
+
const plus = (
|
|
12
|
+
<Svg width={20} height={20} viewBox="0 0 24 24" stroke={theme.textPrimary} strokeWidth={2.4} strokeLinecap="round">
|
|
13
|
+
<Path d="M12 5v14M5 12h14" />
|
|
14
|
+
</Svg>
|
|
15
|
+
);
|
|
16
|
+
return (
|
|
17
|
+
<View style={{ width: 360, height: 420 }}>
|
|
18
|
+
<Header title="Earnings" subtitle="$1,990.40 this year" scrollY={scrollY} actions={<IconButton label="Withdraw" icon={plus} variant="ghost" />}>
|
|
19
|
+
<SearchField label="Search payouts" placeholder="Search payouts" clearLabel="Clear" />
|
|
20
|
+
</Header>
|
|
21
|
+
<Animated.ScrollView tabIndex={0} onScroll={onScroll} scrollEventThrottle={16}>
|
|
22
|
+
{DAYS.map((day) => (
|
|
23
|
+
<View key={day} style={{ flexDirection: "row", justifyContent: "space-between", paddingHorizontal: 16, paddingVertical: 14 }}>
|
|
24
|
+
<Txt variant="label">{`Tips · ${day}`}</Txt>
|
|
25
|
+
<Txt tone="secondary">$24.00</Txt>
|
|
26
|
+
</View>
|
|
27
|
+
))}
|
|
28
|
+
</Animated.ScrollView>
|
|
29
|
+
</View>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/image-viewer/native/gallery.tsx
|
|
4
|
+
import { Button, ImageViewer } from "@krizaka/ui/native";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
var png = (data) => `data:image/png;base64,${data}`;
|
|
8
|
+
var PHOTOS = [
|
|
9
|
+
{ uri: png("iVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAIAAACDRijCAAAB90lEQVR42nVU247TMBCdGU/s3CilhdXy0C28sRLfwf//BLtspV6gbZzYjoeHdFOnLNI82Nbo6Nxk/P7xB5EwwesIEzACM2iFRa4Ko0xGKFFCkNATRobpMgEhsCIhAnUZGQ6MoBVWZbb8UCwWRZlnvffnP4092t55kjhuDkMorBVQgj3Q0Qx1yXd39Xq9WK3m72rT2W7ztN/83B33x945upIChUIEA5CMEAPh0qjlovj6ZfHt8f5hvawq3Vo3n+VGwbOE8yFI3w8QF2kErJXQFUWYQDNWOX9alKvV/GG9vP/83hh2LigQb607nqS1oYsEcSRFNEjDiXNaQa6xKnhWm7rSxmRZRohYVaauTJmz0UhBEnWDNIJpaqAJFIgE79qus513noCDC67tQttJ7xkiKiBIUptIu5IS7EN7ara/9puZUYRlqZ1126ftYbN3pwZjYBROnB3NnjaIQEnfnezueZsrCbarau2sO7zsDi9b3zRKeqXSfG5Sw4QXinh/Ppw2Errjucg5+tCezu7cgPcZpvsylYa3ZWWM4p39HaRtG0aEiH3AGBljGnHiEU2lJTVjEIoxdn0IwChEwjghMk3t32YnTWMCpnjli7ebTDKanaZ2A5EqfYPI+H5lpC7b8gbE/4lMmq1oABJFoPD2G7gMptfXM16vRPAXAU4Dl1f5CK8AAAAASUVORK5CYII="), alt: "Elena on stage, backlit", caption: "Sunset session \xB7 Lisbon" },
|
|
10
|
+
{ uri: png("iVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAIAAACDRijCAAAB6klEQVR42o2T3W4TQQyF7eOZnexmq2wiaLmgrbgB2ifgjvd/AwrlCokmNEXpNtn/8XCR5q/dApIvrNGx9dnjw6PzzwSwCEQYAhGIEIRYWIQYDGEIi2wTwrNHwDCwDiPiXDRwxlirxI3nVtkzmLHVbEIOAwQYNoYBa0yauNfj5GScDOOobMPtspsvu6INSo+VdMi1l4ABA7Fikcbu9Pjo4ix7/zbLjlxe+G/T1Zeb8ud9UzRBaVtw0IX2R4MxA2ePJ8OL88mnj68uz8ajYZQX3WQUs31ofzxM77vaM/WD7HIjNooH0ckk/XCaXZ6N371JE2fKxhNkUdFsqYu66poQCD0gh0TWRFGSuCx1ozRKnHFWiHk0tFnqkjiykYduNtU34CMRiwSWynNeaV5q2SgTl63mteZVqD0rG5YAQi/IJocJkEZ5vvTXv6rJqCAgi21e+6tZ9X1ez1ehURD4BRCh3R2JbQl3hV5NK5blogrZMMorvZ43X2/b3yV1W5YeENkRQUxglB3f5F1L5WwVhgNbepqv9K7Q0nOA4CWQTRcGDBvLgDKKDrOlX7SNNeoZjXKnrPx3kINlr10iCqlV2obZE4MJIP4XyMH3rxttnsLasfhPkK1y47Ve0Ra776yfLxt7UqAvnnp9bfcnsj/xIr3biGqZngAAAABJRU5ErkJggg=="), alt: "The crowd at the front" },
|
|
11
|
+
{ uri: png("iVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAIAAACDRijCAAABrklEQVR42o1Ty3LbMAwEFiCpR5vY1iVOT+2pP9H//5lOHfklmc8ebDmexEpyIQEMZrmLBfnXn98Aq7CAFSy3sUyVmeI1BljPF6b8zSlgAeSTBgZYjQKYfW2OwpWgCiYgYdxvwnuZc9pfGX2RiBFMDRCQTLgAq5WL2k+JGIUzWhk1KqBSKDMV5qKTNOALE7EitbOPbbNo2sqZnOLgx5Mfc44MOks7z+ijiRhB4+zq+8Nz1z0tlk3lQvD/dv1mvzkMh1wiM6m9YTRnTWV00bY/uu7n03q97GpnQ/APTe0M/nIZ/DGXfMf+NyhG0Ti7/NauV8vnVdc9PFrRmCKAlH0IA1EIKX5g/2VHjMCpNM62VdU4a9UowMy1s42ramsGL0zp1f65HTHKIlRKitH7EGKKzJJyCjHE5Imzgkjx3v4LkVtcpuTD0B/6za4W4crYmML28LI/bkMcmbMKXey/8yevuGBw8fHUH3qrSDnUzsXkt4ft/tindBIuLLjazyK4a9w5oJLG03GzKzGO1hgqyccxhBOVbIQZrAJg/ltfU2bKOY6noeSoCmEiSkwZYAAA/wd2L6cjlMdGoAAAAABJRU5ErkJggg=="), alt: "The band packing up" }
|
|
12
|
+
];
|
|
13
|
+
function NativeImageViewerGallery({ defaultOpen = false }) {
|
|
14
|
+
const [index, setIndex] = useState(defaultOpen ? 0 : null);
|
|
15
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
16
|
+
/* @__PURE__ */ jsx(Button, { label: "Open the photos", onPress: () => setIndex(0) }),
|
|
17
|
+
/* @__PURE__ */ jsx(ImageViewer, { images: PHOTOS, index, onIndexChange: setIndex, closeLabel: "Close", positionLabel: (n, total) => `${n} of ${total}` })
|
|
18
|
+
] });
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
NativeImageViewerGallery as default
|
|
22
|
+
};
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Button, ImageViewer } from "@krizaka/ui/native";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
|
|
4
|
+
// Stand-in photos (an app passes its CDN's URIs): tiny PNGs, so the example runs offline.
|
|
5
|
+
const png = (data: string) => `data:image/png;base64,${data}`;
|
|
6
|
+
const PHOTOS = [
|
|
7
|
+
{ uri: png("iVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAIAAACDRijCAAAB90lEQVR42nVU247TMBCdGU/s3CilhdXy0C28sRLfwf//BLtspV6gbZzYjoeHdFOnLNI82Nbo6Nxk/P7xB5EwwesIEzACM2iFRa4Ko0xGKFFCkNATRobpMgEhsCIhAnUZGQ6MoBVWZbb8UCwWRZlnvffnP4092t55kjhuDkMorBVQgj3Q0Qx1yXd39Xq9WK3m72rT2W7ztN/83B33x945upIChUIEA5CMEAPh0qjlovj6ZfHt8f5hvawq3Vo3n+VGwbOE8yFI3w8QF2kErJXQFUWYQDNWOX9alKvV/GG9vP/83hh2LigQb607nqS1oYsEcSRFNEjDiXNaQa6xKnhWm7rSxmRZRohYVaauTJmz0UhBEnWDNIJpaqAJFIgE79qus513noCDC67tQttJ7xkiKiBIUptIu5IS7EN7ara/9puZUYRlqZ1126ftYbN3pwZjYBROnB3NnjaIQEnfnezueZsrCbarau2sO7zsDi9b3zRKeqXSfG5Sw4QXinh/Ppw2Errjucg5+tCezu7cgPcZpvsylYa3ZWWM4p39HaRtG0aEiH3AGBljGnHiEU2lJTVjEIoxdn0IwChEwjghMk3t32YnTWMCpnjli7ebTDKanaZ2A5EqfYPI+H5lpC7b8gbE/4lMmq1oABJFoPD2G7gMptfXM16vRPAXAU4Dl1f5CK8AAAAASUVORK5CYII="), alt: "Elena on stage, backlit", caption: "Sunset session · Lisbon" },
|
|
8
|
+
{ uri: png("iVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAIAAACDRijCAAAB6klEQVR42o2T3W4TQQyF7eOZnexmq2wiaLmgrbgB2ifgjvd/AwrlCokmNEXpNtn/8XCR5q/dApIvrNGx9dnjw6PzzwSwCEQYAhGIEIRYWIQYDGEIi2wTwrNHwDCwDiPiXDRwxlirxI3nVtkzmLHVbEIOAwQYNoYBa0yauNfj5GScDOOobMPtspsvu6INSo+VdMi1l4ABA7Fikcbu9Pjo4ix7/zbLjlxe+G/T1Zeb8ud9UzRBaVtw0IX2R4MxA2ePJ8OL88mnj68uz8ajYZQX3WQUs31ofzxM77vaM/WD7HIjNooH0ckk/XCaXZ6N371JE2fKxhNkUdFsqYu66poQCD0gh0TWRFGSuCx1ozRKnHFWiHk0tFnqkjiykYduNtU34CMRiwSWynNeaV5q2SgTl63mteZVqD0rG5YAQi/IJocJkEZ5vvTXv6rJqCAgi21e+6tZ9X1ez1ehURD4BRCh3R2JbQl3hV5NK5blogrZMMorvZ43X2/b3yV1W5YeENkRQUxglB3f5F1L5WwVhgNbepqv9K7Q0nOA4CWQTRcGDBvLgDKKDrOlX7SNNeoZjXKnrPx3kINlr10iCqlV2obZE4MJIP4XyMH3rxttnsLasfhPkK1y47Ve0Ra776yfLxt7UqAvnnp9bfcnsj/xIr3biGqZngAAAABJRU5ErkJggg=="), alt: "The crowd at the front" },
|
|
9
|
+
{ uri: png("iVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAIAAACDRijCAAABrklEQVR42o1Ty3LbMAwEFiCpR5vY1iVOT+2pP9H//5lOHfklmc8ebDmexEpyIQEMZrmLBfnXn98Aq7CAFSy3sUyVmeI1BljPF6b8zSlgAeSTBgZYjQKYfW2OwpWgCiYgYdxvwnuZc9pfGX2RiBFMDRCQTLgAq5WL2k+JGIUzWhk1KqBSKDMV5qKTNOALE7EitbOPbbNo2sqZnOLgx5Mfc44MOks7z+ijiRhB4+zq+8Nz1z0tlk3lQvD/dv1mvzkMh1wiM6m9YTRnTWV00bY/uu7n03q97GpnQ/APTe0M/nIZ/DGXfMf+NyhG0Ti7/NauV8vnVdc9PFrRmCKAlH0IA1EIKX5g/2VHjMCpNM62VdU4a9UowMy1s42ramsGL0zp1f65HTHKIlRKitH7EGKKzJJyCjHE5Imzgkjx3v4LkVtcpuTD0B/6za4W4crYmML28LI/bkMcmbMKXey/8yevuGBw8fHUH3qrSDnUzsXkt4ft/tindBIuLLjazyK4a9w5oJLG03GzKzGO1hgqyccxhBOVbIQZrAJg/ltfU2bKOY6noeSoCmEiSkwZYAAA/wd2L6cjlMdGoAAAAABJRU5ErkJggg=="), alt: "The band packing up" },
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
// Full screen: pinch or double tap to zoom, swipe between photos, swipe down to close.
|
|
13
|
+
export default function NativeImageViewerGallery({ defaultOpen = false }: { defaultOpen?: boolean }) {
|
|
14
|
+
const [index, setIndex] = useState<number | null>(defaultOpen ? 0 : null);
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
<Button label="Open the photos" onPress={() => setIndex(0)} />
|
|
18
|
+
<ImageViewer images={PHOTOS} index={index} onIndexChange={setIndex} closeLabel="Close" positionLabel={(n, total) => `${n} of ${total}`} />
|
|
19
|
+
</>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/kanban/moderation.tsx
|
|
4
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
5
|
+
import { Kanban } from "@krizaka/ui/kanban";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
var columns = [
|
|
9
|
+
{ id: "open", title: "To review", limit: 3 },
|
|
10
|
+
{ id: "reviewing", title: "Reviewing" },
|
|
11
|
+
{ id: "resolved", title: "Resolved" }
|
|
12
|
+
];
|
|
13
|
+
function KanbanModeration() {
|
|
14
|
+
const [reports, setReports] = useState([
|
|
15
|
+
{ id: "r1", video: "Backflip on the beach", reason: "Dangerous act", status: "open" },
|
|
16
|
+
{ id: "r2", video: "Cover of the summer hit", reason: "Copyright", status: "open" },
|
|
17
|
+
{ id: "r3", video: "Night drive", reason: "Copyright", status: "reviewing" },
|
|
18
|
+
{ id: "r4", video: "Q&A with fans", reason: "Spam", status: "resolved" }
|
|
19
|
+
]);
|
|
20
|
+
const move = ({ cardId, to, index }) => setReports((all) => {
|
|
21
|
+
const card = { ...all.find((r) => r.id === cardId), status: to };
|
|
22
|
+
const rest = all.filter((r) => r.id !== cardId);
|
|
23
|
+
const before = rest.filter((r) => r.status === to).slice(0, index);
|
|
24
|
+
const at = before.length ? rest.indexOf(before[before.length - 1]) + 1 : rest.findIndex((r) => r.status === to);
|
|
25
|
+
return [...rest.slice(0, Math.max(0, at)), card, ...rest.slice(Math.max(0, at))];
|
|
26
|
+
});
|
|
27
|
+
const render = (r) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-1.5", children: [
|
|
28
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold", children: r.video }),
|
|
29
|
+
/* @__PURE__ */ jsx(Badge, { tone: r.reason === "Copyright" ? "warning" : "neutral", children: r.reason })
|
|
30
|
+
] });
|
|
31
|
+
return /* @__PURE__ */ jsx(Kanban, { "aria-label": "Moderation queue", columns, cards: reports, getId: (r) => r.id, getColumn: (r) => r.status, getTitle: (r) => r.video, renderCard: render, onMove: move });
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
KanbanModeration as default
|
|
35
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
4
|
+
import { Kanban, type KanbanMove } from "@krizaka/ui/kanban";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
|
|
7
|
+
type Report = { id: string; video: string; reason: string; status: string };
|
|
8
|
+
const columns = [
|
|
9
|
+
{ id: "open", title: "To review", limit: 3 },
|
|
10
|
+
{ id: "reviewing", title: "Reviewing" },
|
|
11
|
+
{ id: "resolved", title: "Resolved" },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
// The moderation queue: drag a report, or press Space and the arrow keys — every move announced.
|
|
15
|
+
export default function KanbanModeration() {
|
|
16
|
+
const [reports, setReports] = useState<Report[]>([
|
|
17
|
+
{ id: "r1", video: "Backflip on the beach", reason: "Dangerous act", status: "open" },
|
|
18
|
+
{ id: "r2", video: "Cover of the summer hit", reason: "Copyright", status: "open" },
|
|
19
|
+
{ id: "r3", video: "Night drive", reason: "Copyright", status: "reviewing" },
|
|
20
|
+
{ id: "r4", video: "Q&A with fans", reason: "Spam", status: "resolved" },
|
|
21
|
+
]);
|
|
22
|
+
const move = ({ cardId, to, index }: KanbanMove) =>
|
|
23
|
+
setReports((all) => {
|
|
24
|
+
const card = { ...all.find((r) => r.id === cardId)!, status: to };
|
|
25
|
+
const rest = all.filter((r) => r.id !== cardId);
|
|
26
|
+
const before = rest.filter((r) => r.status === to).slice(0, index);
|
|
27
|
+
const at = before.length ? rest.indexOf(before[before.length - 1]!) + 1 : rest.findIndex((r) => r.status === to);
|
|
28
|
+
return [...rest.slice(0, Math.max(0, at)), card, ...rest.slice(Math.max(0, at))];
|
|
29
|
+
});
|
|
30
|
+
const render = (r: Report) => (
|
|
31
|
+
<div className="flex flex-col items-start gap-1.5">
|
|
32
|
+
<span className="font-semibold">{r.video}</span>
|
|
33
|
+
<Badge tone={r.reason === "Copyright" ? "warning" : "neutral"}>{r.reason}</Badge>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
return <Kanban aria-label="Moderation queue" columns={columns} cards={reports} getId={(r) => r.id} getColumn={(r) => r.status} getTitle={(r) => r.video} renderCard={render} onMove={move} />;
|
|
37
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/list/jobs.tsx
|
|
4
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
5
|
+
import { List } from "@krizaka/ui/list";
|
|
6
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
var jobs = [
|
|
8
|
+
{ id: "j1", name: "Dub \u201CSunset session\u201D into English", studio: "Dubbing studio", status: "running", when: "now" },
|
|
9
|
+
{ id: "j2", name: "Transcribe the interview with Elena", studio: "Transcript studio", status: "done", when: "14:02" },
|
|
10
|
+
{ id: "j3", name: "Clip the five best moments", studio: "Clips studio", status: "failed", when: "12:15" }
|
|
11
|
+
];
|
|
12
|
+
var TONE = { running: "accent", done: "success", failed: "danger" };
|
|
13
|
+
function ListJobs() {
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
List,
|
|
16
|
+
{
|
|
17
|
+
"aria-label": "Jobs",
|
|
18
|
+
items: jobs,
|
|
19
|
+
getId: (j) => j.id,
|
|
20
|
+
chevrons: true,
|
|
21
|
+
row: (j) => ({
|
|
22
|
+
title: j.name,
|
|
23
|
+
description: j.studio,
|
|
24
|
+
href: `#/jobs/${j.id}`,
|
|
25
|
+
meta: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26
|
+
/* @__PURE__ */ jsx(Badge, { tone: TONE[j.status], children: j.status }),
|
|
27
|
+
/* @__PURE__ */ jsx("span", { children: j.when })
|
|
28
|
+
] })
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
ListJobs as default
|
|
35
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
2
|
+
import { List } from "@krizaka/ui/list";
|
|
3
|
+
|
|
4
|
+
type Job = { id: string; name: string; studio: string; status: "running" | "done" | "failed"; when: string };
|
|
5
|
+
const jobs: Job[] = [
|
|
6
|
+
{ id: "j1", name: "Dub “Sunset session” into English", studio: "Dubbing studio", status: "running", when: "now" },
|
|
7
|
+
{ id: "j2", name: "Transcribe the interview with Elena", studio: "Transcript studio", status: "done", when: "14:02" },
|
|
8
|
+
{ id: "j3", name: "Clip the five best moments", studio: "Clips studio", status: "failed", when: "12:15" },
|
|
9
|
+
];
|
|
10
|
+
const TONE = { running: "accent", done: "success", failed: "danger" } as const;
|
|
11
|
+
|
|
12
|
+
// Orazaka's jobs: each row opens its run; the status and the time beside it.
|
|
13
|
+
export default function ListJobs() {
|
|
14
|
+
return (
|
|
15
|
+
<List
|
|
16
|
+
aria-label="Jobs"
|
|
17
|
+
items={jobs}
|
|
18
|
+
getId={(j) => j.id}
|
|
19
|
+
chevrons
|
|
20
|
+
row={(j) => ({
|
|
21
|
+
title: j.name,
|
|
22
|
+
description: j.studio,
|
|
23
|
+
href: `#/jobs/${j.id}`,
|
|
24
|
+
meta: (
|
|
25
|
+
<>
|
|
26
|
+
<Badge tone={TONE[j.status]}>{j.status}</Badge>
|
|
27
|
+
<span>{j.when}</span>
|
|
28
|
+
</>
|
|
29
|
+
),
|
|
30
|
+
})}
|
|
31
|
+
/>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/list/selectable.tsx
|
|
4
|
+
import { Avatar } from "@krizaka/ui/avatar";
|
|
5
|
+
import { Button } from "@krizaka/ui/button";
|
|
6
|
+
import { List } from "@krizaka/ui/list";
|
|
7
|
+
import { useState } from "react";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
var viewers = [
|
|
10
|
+
{ id: "u1", name: "Mina Okafor", handle: "@mina", tipped: "$12" },
|
|
11
|
+
{ id: "u2", name: "Alex Moreau", handle: "@alex", tipped: "$5" },
|
|
12
|
+
{ id: "u3", name: "Elena Ruiz", handle: "@elena", tipped: "\u2014" }
|
|
13
|
+
];
|
|
14
|
+
function ListSelectable() {
|
|
15
|
+
const [selected, setSelected] = useState(["u1"]);
|
|
16
|
+
return /* @__PURE__ */ jsx(
|
|
17
|
+
List,
|
|
18
|
+
{
|
|
19
|
+
"aria-label": "Viewers of your story",
|
|
20
|
+
density: "compact",
|
|
21
|
+
items: viewers,
|
|
22
|
+
getId: (v) => v.id,
|
|
23
|
+
selectable: true,
|
|
24
|
+
selected,
|
|
25
|
+
onSelectedChange: setSelected,
|
|
26
|
+
row: (v) => ({ title: v.name, description: v.handle, leading: /* @__PURE__ */ jsx(Avatar, { alt: v.name, fallback: v.name.charAt(0), size: "sm" }), meta: v.tipped }),
|
|
27
|
+
footer: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "primary", disabled: selected.length === 0, children: `Thank ${selected.length}` })
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
ListSelectable as default
|
|
33
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Avatar } from "@krizaka/ui/avatar";
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { List } from "@krizaka/ui/list";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
|
|
8
|
+
const viewers = [
|
|
9
|
+
{ id: "u1", name: "Mina Okafor", handle: "@mina", tipped: "$12" },
|
|
10
|
+
{ id: "u2", name: "Alex Moreau", handle: "@alex", tipped: "$5" },
|
|
11
|
+
{ id: "u3", name: "Elena Ruiz", handle: "@elena", tipped: "—" },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
// Compact and selectable: who watched a story, a thank-you for the ones you pick.
|
|
15
|
+
export default function ListSelectable() {
|
|
16
|
+
const [selected, setSelected] = useState<string[]>(["u1"]);
|
|
17
|
+
return (
|
|
18
|
+
<List
|
|
19
|
+
aria-label="Viewers of your story"
|
|
20
|
+
density="compact"
|
|
21
|
+
items={viewers}
|
|
22
|
+
getId={(v) => v.id}
|
|
23
|
+
selectable
|
|
24
|
+
selected={selected}
|
|
25
|
+
onSelectedChange={setSelected}
|
|
26
|
+
row={(v) => ({ title: v.name, description: v.handle, leading: <Avatar alt={v.name} fallback={v.name.charAt(0)} size="sm" />, meta: v.tipped })}
|
|
27
|
+
footer={<Button size="sm" variant="primary" disabled={selected.length === 0}>{`Thank ${selected.length}`}</Button>}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/list/virtualized.tsx
|
|
4
|
+
import { List } from "@krizaka/ui/list";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
var payouts = Array.from({ length: 2e3 }, (_, i) => ({ id: `p${i}`, amount: `$${(120 + i * 37 % 900).toFixed(2)}`, day: `Payout #${2e3 - i}` }));
|
|
7
|
+
function ListVirtualized() {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
List,
|
|
10
|
+
{
|
|
11
|
+
"aria-label": "Payouts",
|
|
12
|
+
density: "compact",
|
|
13
|
+
items: payouts,
|
|
14
|
+
getId: (p) => p.id,
|
|
15
|
+
virtualize: { rowHeight: 44, height: 264 },
|
|
16
|
+
row: (p) => ({ title: p.day, meta: p.amount })
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
ListVirtualized as default
|
|
22
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { List } from "@krizaka/ui/list";
|
|
2
|
+
|
|
3
|
+
const payouts = Array.from({ length: 2_000 }, (_, i) => ({ id: `p${i}`, amount: `$${(120 + ((i * 37) % 900)).toFixed(2)}`, day: `Payout #${2_000 - i}` }));
|
|
4
|
+
|
|
5
|
+
// 2,000 payouts: only the rows in view are rendered, in a region the keyboard scrolls.
|
|
6
|
+
export default function ListVirtualized() {
|
|
7
|
+
return (
|
|
8
|
+
<List
|
|
9
|
+
aria-label="Payouts"
|
|
10
|
+
density="compact"
|
|
11
|
+
items={payouts}
|
|
12
|
+
getId={(p) => p.id}
|
|
13
|
+
virtualize={{ rowHeight: 44, height: 264 }}
|
|
14
|
+
row={(p) => ({ title: p.day, meta: p.amount })}
|
|
15
|
+
/>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/loader/native/block.tsx
|
|
4
|
+
import { Loader } from "@krizaka/ui/native";
|
|
5
|
+
import { View } from "react-native";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function NativeLoaderBlock() {
|
|
8
|
+
return /* @__PURE__ */ jsx(View, { style: { width: 320 }, children: /* @__PURE__ */ jsx(Loader, { variant: "block", label: "Loading your jobs", delay: 0 }) });
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
NativeLoaderBlock as default
|
|
12
|
+
};
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Loader } from "@krizaka/ui/native";
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
|
|
4
|
+
// `block`: the centre of a region whose content is on its way (the Jobs tab's first load).
|
|
5
|
+
export default function NativeLoaderBlock() {
|
|
6
|
+
return (
|
|
7
|
+
<View style={{ width: 320 }}>
|
|
8
|
+
<Loader variant="block" label="Loading your jobs" delay={0} />
|
|
9
|
+
</View>
|
|
10
|
+
);
|
|
11
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/loader/native/job-wait.tsx
|
|
4
|
+
import { Button, Loader } from "@krizaka/ui/native";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { View } from "react-native";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
function NativeLoaderJobWait() {
|
|
9
|
+
const [status, setStatus] = useState("loading");
|
|
10
|
+
return /* @__PURE__ */ jsxs(View, { style: { gap: 16, width: 320 }, children: [
|
|
11
|
+
/* @__PURE__ */ jsx(Loader, { label: "Dubbing your video", value: 0.42, eta: "About 2 min left", status, successLabel: "Dubbing ready", delay: 0 }),
|
|
12
|
+
/* @__PURE__ */ jsx(Button, { label: "Finish", size: "sm", onPress: () => setStatus("success") })
|
|
13
|
+
] });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
NativeLoaderJobWait as default
|
|
17
|
+
};
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Button, Loader } from "@krizaka/ui/native";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { View } from "react-native";
|
|
4
|
+
|
|
5
|
+
// An Orazaka job: shown after 250 ms, never blinking, ending on a check and its words.
|
|
6
|
+
export default function NativeLoaderJobWait() {
|
|
7
|
+
const [status, setStatus] = useState<"loading" | "success">("loading");
|
|
8
|
+
return (
|
|
9
|
+
<View style={{ gap: 16, width: 320 }}>
|
|
10
|
+
<Loader label="Dubbing your video" value={0.42} eta="About 2 min left" status={status} successLabel="Dubbing ready" delay={0} />
|
|
11
|
+
<Button label="Finish" size="sm" onPress={() => setStatus("success")} />
|
|
12
|
+
</View>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/map/cluster.tsx
|
|
4
|
+
import { Cluster, Map, StaticMap } from "@krizaka/ui/map";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
var CREATORS = Array.from({ length: 60 }, (_, i) => ({
|
|
7
|
+
id: String(i),
|
|
8
|
+
label: `Creator ${i + 1}`,
|
|
9
|
+
position: [-73.62 + i * 37 % 60 / 600, 45.48 + i * 53 % 70 / 700]
|
|
10
|
+
}));
|
|
11
|
+
function MapCluster() {
|
|
12
|
+
return /* @__PURE__ */ jsx(Map, { label: "Creators near Montr\xE9al", center: [-73.58, 45.53], zoom: 11, className: "h-80 w-full max-w-xl", fallback: /* @__PURE__ */ jsx(StaticMap, { label: "Creators near Montr\xE9al", center: [-73.58, 45.53], zoom: 11 }), children: /* @__PURE__ */ jsx(Cluster, { points: CREATORS }) });
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
MapCluster as default
|
|
16
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Cluster, Map, StaticMap } from "@krizaka/ui/map";
|
|
4
|
+
|
|
5
|
+
// 60 creators around Montréal, grouped while they are close; a group opens by zooming in.
|
|
6
|
+
const CREATORS = Array.from({ length: 60 }, (_, i) => ({
|
|
7
|
+
id: String(i),
|
|
8
|
+
label: `Creator ${i + 1}`,
|
|
9
|
+
position: [-73.62 + ((i * 37) % 60) / 600, 45.48 + ((i * 53) % 70) / 700] as const,
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
export default function MapCluster() {
|
|
13
|
+
return (
|
|
14
|
+
<Map label="Creators near Montréal" center={[-73.58, 45.53]} zoom={11} className="h-80 w-full max-w-xl" fallback={<StaticMap label="Creators near Montréal" center={[-73.58, 45.53]} zoom={11} />}>
|
|
15
|
+
<Cluster points={CREATORS} />
|
|
16
|
+
</Map>
|
|
17
|
+
);
|
|
18
|
+
}
|