@ankhorage/zora 25.2.1 → 25.3.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/CHANGELOG.md +6 -0
- package/README.md +2 -1
- package/dist/features/grid-rulers/adapters/inbound/GridLineOverlay.d.ts +5 -0
- package/dist/features/grid-rulers/adapters/inbound/GridLineOverlay.d.ts.map +1 -0
- package/dist/features/grid-rulers/adapters/inbound/GridLineOverlay.js +69 -0
- package/dist/features/grid-rulers/adapters/inbound/GridLineOverlay.js.map +1 -0
- package/dist/features/grid-rulers/adapters/inbound/GridRuler.d.ts +5 -0
- package/dist/features/grid-rulers/adapters/inbound/GridRuler.d.ts.map +1 -0
- package/dist/features/grid-rulers/adapters/inbound/GridRuler.js +59 -0
- package/dist/features/grid-rulers/adapters/inbound/GridRuler.js.map +1 -0
- package/dist/features/grid-rulers/application/projectGridRulerPosition.d.ts +4 -0
- package/dist/features/grid-rulers/application/projectGridRulerPosition.d.ts.map +1 -0
- package/dist/features/grid-rulers/application/projectGridRulerPosition.js +10 -0
- package/dist/features/grid-rulers/application/projectGridRulerPosition.js.map +1 -0
- package/dist/features/grid-rulers/application/resolveGridRulerMarks.d.ts +5 -0
- package/dist/features/grid-rulers/application/resolveGridRulerMarks.d.ts.map +1 -0
- package/dist/features/grid-rulers/application/resolveGridRulerMarks.js +22 -0
- package/dist/features/grid-rulers/application/resolveGridRulerMarks.js.map +1 -0
- package/dist/features/grid-rulers/meta.d.ts +21 -0
- package/dist/features/grid-rulers/meta.d.ts.map +1 -0
- package/dist/features/grid-rulers/meta.js +22 -0
- package/dist/features/grid-rulers/meta.js.map +1 -0
- package/dist/features/grid-rulers/public.d.ts +5 -0
- package/dist/features/grid-rulers/public.d.ts.map +1 -0
- package/dist/features/grid-rulers/public.js +4 -0
- package/dist/features/grid-rulers/public.js.map +1 -0
- package/dist/features/registry/ZORA_COMPONENT_REGISTRY.d.ts.map +1 -1
- package/dist/features/registry/ZORA_COMPONENT_REGISTRY.js +3 -0
- package/dist/features/registry/ZORA_COMPONENT_REGISTRY.js.map +1 -1
- package/dist/features/registry/componentMeta.d.ts.map +1 -1
- package/dist/features/registry/componentMeta.js +3 -0
- package/dist/features/registry/componentMeta.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types/grid-rulers.d.ts +48 -0
- package/dist/types/grid-rulers.d.ts.map +1 -0
- package/dist/types/grid-rulers.js +2 -0
- package/dist/types/grid-rulers.js.map +1 -0
- package/package.json +2 -2
- package/src/features/grid-rulers/adapters/inbound/GridLineOverlay.tsx +123 -0
- package/src/features/grid-rulers/adapters/inbound/GridRuler.tsx +96 -0
- package/src/features/grid-rulers/adapters/inbound/GridRulers.test.tsx +162 -0
- package/src/features/grid-rulers/application/projectGridRulerPosition.ts +19 -0
- package/src/features/grid-rulers/application/resolveGridRulerMarks.test.ts +90 -0
- package/src/features/grid-rulers/application/resolveGridRulerMarks.ts +39 -0
- package/src/features/grid-rulers/meta.ts +26 -0
- package/src/features/grid-rulers/public.ts +10 -0
- package/src/features/registry/ZORA_COMPONENT_REGISTRY.ts +3 -0
- package/src/features/registry/componentMeta.ts +3 -0
- package/src/index.ts +8 -0
- package/src/types/grid-rulers.ts +59 -0
- package/web-dist/chunks/{Accordion-mh67wb34.js → Accordion-090y18cv.js} +2 -2
- package/web-dist/chunks/{Accordion-7yazfxr6.js → Accordion-3d4wkzg7.js} +4 -4
- package/web-dist/chunks/{Accordion-ndf3jqhb.js → Accordion-40tenzcg.js} +3 -3
- package/web-dist/chunks/{Accordion-cbfa2b8j.js → Accordion-4s68t3h7.js} +5 -5
- package/web-dist/chunks/{Accordion-7asr7vb0.js → Accordion-4zqd7twp.js} +4 -4
- package/web-dist/chunks/{Accordion-sdcfa14w.js → Accordion-5g05kfmx.js} +3 -3
- package/web-dist/chunks/{Accordion-wgejzesa.js → Accordion-61ntvh14.js} +3 -3
- package/web-dist/chunks/{Accordion-kkr7xfh2.js → Accordion-689w7frk.js} +4 -4
- package/web-dist/chunks/{Accordion-q09fjenx.js → Accordion-6rrqpb2h.js} +1 -1
- package/web-dist/chunks/{Accordion-mej71qnw.js → Accordion-a4cma5b6.js} +2 -2
- package/web-dist/chunks/Accordion-e6ddpz5v.js +209 -0
- package/web-dist/chunks/Accordion-e9ewv367.js +201 -0
- package/web-dist/chunks/{Accordion-9dqkq9am.js → Accordion-ejx5gcf9.js} +8 -8
- package/web-dist/chunks/{Accordion-pe66x9cv.js → Accordion-ewf1zen9.js} +4 -4
- package/web-dist/chunks/{Accordion-xvzrx6bh.js → Accordion-fjxcn6g9.js} +7 -7
- package/web-dist/chunks/{Accordion-teg40mpt.js → Accordion-fmzxat3v.js} +3 -3
- package/web-dist/chunks/{Accordion-016wvwpg.js → Accordion-h3y8qev2.js} +1 -1
- package/web-dist/chunks/{Accordion-t0hbez90.js → Accordion-h7zsx9eg.js} +2 -2
- package/web-dist/chunks/{Accordion-ch4q5w0z.js → Accordion-jnc315h7.js} +1 -1
- package/web-dist/chunks/{Accordion-fkc50r9z.js → Accordion-kjtcbe09.js} +2 -2
- package/web-dist/chunks/{Accordion-tmrjy46p.js → Accordion-nssr5gep.js} +1 -1
- package/web-dist/chunks/{Accordion-ntndskbj.js → Accordion-pvj5npzc.js} +2 -2
- package/web-dist/chunks/{Accordion-54k0ncs3.js → Accordion-q2z00p5r.js} +5 -73
- package/web-dist/chunks/{Accordion-ggwxv6k3.js → Accordion-r1cj2w9e.js} +2 -2
- package/web-dist/chunks/{Accordion-5ga4549x.js → Accordion-sp4k08kw.js} +3 -3
- package/web-dist/chunks/{Accordion-1p9r2ack.js → Accordion-sy1cc5my.js} +2 -2
- package/web-dist/chunks/{Accordion-hmhdwvqp.js → Accordion-tqpsmdrk.js} +3 -3
- package/web-dist/chunks/{Accordion-fzkrrc4z.js → Accordion-v0grdh6q.js} +1 -1
- package/web-dist/chunks/{Accordion-ajawc6nq.js → Accordion-zt9yghdz.js} +3 -3
- package/web-dist/components/accordion/Accordion.js +4 -4
- package/web-dist/components/accordion-item/AccordionItem.js +4 -4
- package/web-dist/components/app-bar/AppBar.js +6 -6
- package/web-dist/components/app-header/AppHeader.js +6 -6
- package/web-dist/components/app-shell/AppShell.js +1 -1
- package/web-dist/components/auth-screen/AuthScreen.js +9 -9
- package/web-dist/components/avatar/Avatar.js +4 -4
- package/web-dist/components/avatar-group/AvatarGroup.js +4 -4
- package/web-dist/components/badge/Badge.js +1 -1
- package/web-dist/components/barcode-scanner-view/BarcodeScannerView.js +9 -9
- package/web-dist/components/bottom-sheet/BottomSheet.js +2 -2
- package/web-dist/components/bottom-sheet-flat-list/BottomSheetFlatList.js +2 -2
- package/web-dist/components/bottom-sheet-scroll-view/BottomSheetScrollView.js +2 -2
- package/web-dist/components/bottom-sheet-section-list/BottomSheetSectionList.js +2 -2
- package/web-dist/components/bottom-sheet-view/BottomSheetView.js +2 -2
- package/web-dist/components/bottom-sheet-virtualized-list/BottomSheetVirtualizedList.js +2 -2
- package/web-dist/components/breadcrumbs/Breadcrumbs.js +4 -4
- package/web-dist/components/button/Button.js +2 -2
- package/web-dist/components/button-group/ButtonGroup.js +2 -2
- package/web-dist/components/camera-permission-view/CameraPermissionView.js +9 -9
- package/web-dist/components/card/Card.js +8 -8
- package/web-dist/components/card-back/CardBack.js +1 -1
- package/web-dist/components/card-hand/CardHand.js +1 -1
- package/web-dist/components/chat-list-item/ChatListItem.js +6 -6
- package/web-dist/components/checkbox/Checkbox.js +3 -3
- package/web-dist/components/checkbox-group/CheckboxGroup.js +3 -3
- package/web-dist/components/chess-board/ChessBoard.js +1 -1
- package/web-dist/components/chip/Chip.js +4 -4
- package/web-dist/components/chip-group/ChipGroup.js +4 -4
- package/web-dist/components/collection-editor/CollectionEditor.js +8 -8
- package/web-dist/components/content-rail/ContentRail.js +3 -3
- package/web-dist/components/data-table/DataTable.js +13 -13
- package/web-dist/components/date-picker/DatePicker.js +4 -4
- package/web-dist/components/dialog/Dialog.js +3 -3
- package/web-dist/components/divider/Divider.js +1 -1
- package/web-dist/components/empty-state/EmptyState.js +9 -9
- package/web-dist/components/explorer/Explorer.js +6 -6
- package/web-dist/components/field/Field.js +3 -3
- package/web-dist/components/file-explorer/FileExplorer.js +6 -6
- package/web-dist/components/flat-list/FlatList.js +4 -4
- package/web-dist/components/forgot-password-form/ForgotPasswordForm.js +9 -9
- package/web-dist/components/form/Form.js +5 -5
- package/web-dist/components/form-actions/FormActions.js +5 -5
- package/web-dist/components/form-error/FormError.js +5 -5
- package/web-dist/components/game/Game.js +2 -2
- package/web-dist/components/game-entity/GameEntity.js +2 -2
- package/web-dist/components/game-field/GameField.js +2 -2
- package/web-dist/components/game-input-zone/GameInputZone.js +2 -2
- package/web-dist/components/game-measurement-probe/GameMeasurementProbe.js +2 -2
- package/web-dist/components/game-overlay/GameOverlay.js +2 -2
- package/web-dist/components/gradient/Gradient.js +2 -2
- package/web-dist/components/gradient-renderer-provider/GradientRendererProvider.js +2 -2
- package/web-dist/components/grid/Grid.js +1 -1
- package/web-dist/components/grid-line-overlay/GridLineOverlay.d.ts +4 -0
- package/web-dist/components/grid-line-overlay/GridLineOverlay.js +13 -0
- package/web-dist/components/grid-line-overlay/index.d.ts +1 -0
- package/web-dist/components/grid-line-overlay/index.js +2 -0
- package/web-dist/components/grid-ruler/GridRuler.d.ts +4 -0
- package/web-dist/components/grid-ruler/GridRuler.js +13 -0
- package/web-dist/components/grid-ruler/index.d.ts +1 -0
- package/web-dist/components/grid-ruler/index.js +2 -0
- package/web-dist/components/grid-view/GridView.js +1 -1
- package/web-dist/components/heading/Heading.js +1 -1
- package/web-dist/components/hero/Hero.js +8 -8
- package/web-dist/components/icon/Icon.js +1 -1
- package/web-dist/components/icon-button/IconButton.js +2 -2
- package/web-dist/components/image/Image.js +3 -3
- package/web-dist/components/keyboard-avoiding-view/KeyboardAvoidingView.js +1 -1
- package/web-dist/components/list/List.js +4 -4
- package/web-dist/components/list-item/ListItem.js +4 -4
- package/web-dist/components/list-section/ListSection.js +4 -4
- package/web-dist/components/media-card/MediaCard.js +8 -8
- package/web-dist/components/media-explorer/MediaExplorer.js +6 -6
- package/web-dist/components/message-bubble/MessageBubble.js +6 -6
- package/web-dist/components/metric-card/MetricCard.js +8 -8
- package/web-dist/components/missing-element/MissingElement.js +3 -3
- package/web-dist/components/o-auth-provider-button/OAuthProviderButton.js +9 -9
- package/web-dist/components/o-auth-provider-list/OAuthProviderList.js +9 -9
- package/web-dist/components/opening-book/OpeningBook.js +1 -1
- package/web-dist/components/otp-form/OtpForm.js +9 -9
- package/web-dist/components/pagination/Pagination.js +3 -3
- package/web-dist/components/palette-item/PaletteItem.js +8 -8
- package/web-dist/components/playing-card/PlayingCard.js +1 -1
- package/web-dist/components/poker-training-table/PokerTrainingTable.js +1 -1
- package/web-dist/components/popover-menu/PopoverMenu.js +3 -3
- package/web-dist/components/post-card/PostCard.js +8 -8
- package/web-dist/components/product-card/ProductCard.js +8 -8
- package/web-dist/components/progress/Progress.js +3 -3
- package/web-dist/components/progress-ring/ProgressRing.js +3 -3
- package/web-dist/components/radio/Radio.js +4 -4
- package/web-dist/components/radio-group/RadioGroup.js +4 -4
- package/web-dist/components/rating/Rating.js +2 -2
- package/web-dist/components/reader/Reader.js +9 -9
- package/web-dist/components/scan-overlay/ScanOverlay.js +9 -9
- package/web-dist/components/screen/Screen.js +1 -1
- package/web-dist/components/screen-section/ScreenSection.js +3 -3
- package/web-dist/components/scroll-view/ScrollView.js +1 -1
- package/web-dist/components/search-input/SearchInput.js +3 -3
- package/web-dist/components/section-header/SectionHeader.js +3 -3
- package/web-dist/components/section-list/SectionList.js +4 -4
- package/web-dist/components/select/Select.js +3 -3
- package/web-dist/components/selectable-item/SelectableItem.js +1 -1
- package/web-dist/components/selection-provider/SelectionProvider.js +1 -1
- package/web-dist/components/sign-in-form/SignInForm.js +9 -9
- package/web-dist/components/sign-up-form/SignUpForm.js +9 -9
- package/web-dist/components/skeleton/Skeleton.js +11 -11
- package/web-dist/components/skeleton-card/SkeletonCard.js +11 -11
- package/web-dist/components/skeleton-list/SkeletonList.js +11 -11
- package/web-dist/components/skeleton-text/SkeletonText.js +11 -11
- package/web-dist/components/surface/Surface.js +1 -1
- package/web-dist/components/tab/Tab.js +1 -1
- package/web-dist/components/tab-list/TabList.js +1 -1
- package/web-dist/components/tab-panel/TabPanel.js +1 -1
- package/web-dist/components/tabletop-table/TabletopTable.js +1 -1
- package/web-dist/components/tabs/Tabs.js +1 -1
- package/web-dist/components/text/Text.js +1 -1
- package/web-dist/components/text-input/TextInput.js +3 -3
- package/web-dist/components/tile-grid/TileGrid.js +1 -1
- package/web-dist/components/time-picker/TimePicker.js +4 -4
- package/web-dist/components/timeline/Timeline.js +3 -3
- package/web-dist/components/toast/Toast.js +1 -1
- package/web-dist/components/toast-provider/ToastProvider.js +1 -1
- package/web-dist/components/toolbar/Toolbar.js +8 -8
- package/web-dist/components/tree-item/TreeItem.js +7 -7
- package/web-dist/components/uploader/Uploader.js +11 -11
- package/web-dist/components/view/View.js +1 -1
- package/web-dist/manifest.json +539 -493
- package/web-dist/runtime/ZoraProvider.js +3 -3
- /package/web-dist/chunks/{Accordion-qkh5yy94.js → Accordion-7kq500r1.js} +0 -0
- /package/web-dist/chunks/{Accordion-f0jsd9f9.js → Accordion-7tjz25jh.js} +0 -0
- /package/web-dist/chunks/{Accordion-3m3572sa.js → Accordion-88t8fgxv.js} +0 -0
- /package/web-dist/chunks/{Accordion-afmybp67.js → Accordion-9w8wg9mf.js} +0 -0
- /package/web-dist/chunks/{Accordion-bb8y34wh.js → Accordion-b96evb46.js} +0 -0
- /package/web-dist/chunks/{Accordion-nmpmdrba.js → Accordion-dbf93gxh.js} +0 -0
- /package/web-dist/chunks/{Accordion-x12fca21.js → Accordion-fhnazn3n.js} +0 -0
- /package/web-dist/chunks/{Accordion-n9c5tsqw.js → Accordion-qn398m1x.js} +0 -0
- /package/web-dist/chunks/{Accordion-2rgexkze.js → Accordion-rsvphbe4.js} +0 -0
- /package/web-dist/chunks/{Accordion-c69374jn.js → Accordion-sw7ep29d.js} +0 -0
- /package/web-dist/chunks/{Accordion-8jxc7tx9.js → Accordion-w6qedeba.js} +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { type GridViewport, snapWorldCoordinate } from '@ankhorage/grid-view';
|
|
2
|
+
import { describe, expect, test } from 'bun:test';
|
|
3
|
+
|
|
4
|
+
import { resolveGridRulerMarks } from './resolveGridRulerMarks';
|
|
5
|
+
|
|
6
|
+
const viewport: GridViewport = {
|
|
7
|
+
width: 300,
|
|
8
|
+
height: 160,
|
|
9
|
+
offsetX: 40,
|
|
10
|
+
offsetY: 20,
|
|
11
|
+
pixelsPerUnitX: 2,
|
|
12
|
+
pixelsPerUnitY: 4,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
describe('resolveGridRulerMarks', () => {
|
|
16
|
+
test('aligns independent axis scales and scroll offsets through the published viewport transform', () => {
|
|
17
|
+
expect(
|
|
18
|
+
resolveGridRulerMarks(viewport, 'x', {
|
|
19
|
+
kind: 'ticks',
|
|
20
|
+
specification: { mode: 'fixed', step: 20 },
|
|
21
|
+
}).map((mark) => mark.position),
|
|
22
|
+
).toEqual([0, 40, 80, 120, 160, 200, 240, 280]);
|
|
23
|
+
expect(
|
|
24
|
+
resolveGridRulerMarks(viewport, 'y', {
|
|
25
|
+
kind: 'ticks',
|
|
26
|
+
specification: { mode: 'fixed', step: 10 },
|
|
27
|
+
}).map((mark) => mark.position),
|
|
28
|
+
).toEqual([0, 40, 80, 120, 160]);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('projects only visible variable-width category starts', () => {
|
|
32
|
+
expect(
|
|
33
|
+
resolveGridRulerMarks(viewport, 'x', {
|
|
34
|
+
kind: 'categories',
|
|
35
|
+
categories: [
|
|
36
|
+
{ id: 'before', size: 10, start: 20 },
|
|
37
|
+
{ id: 'visible-a', size: 37, start: 40 },
|
|
38
|
+
{ id: 'visible-b', size: 91, start: 77 },
|
|
39
|
+
],
|
|
40
|
+
}),
|
|
41
|
+
).toEqual([
|
|
42
|
+
{ categoryId: 'visible-a', level: 'major', position: 0 },
|
|
43
|
+
{ categoryId: 'visible-b', level: 'major', position: 74 },
|
|
44
|
+
]);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('keeps a fixed interaction snap unchanged when display density changes', () => {
|
|
48
|
+
const snap = { mode: 'fixed' as const, step: 25 };
|
|
49
|
+
const sparse = resolveGridRulerMarks(viewport, 'x', {
|
|
50
|
+
kind: 'ticks',
|
|
51
|
+
specification: { mode: 'fixed', step: 50 },
|
|
52
|
+
});
|
|
53
|
+
const dense = resolveGridRulerMarks(viewport, 'x', {
|
|
54
|
+
kind: 'ticks',
|
|
55
|
+
specification: { mode: 'fixed', step: 5 },
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
expect(dense.length).toBeGreaterThan(sparse.length);
|
|
59
|
+
expect(snapWorldCoordinate(62, snap)).toBe(50);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test('accepts externally supplied labels without introducing domain adapters', () => {
|
|
63
|
+
expect(
|
|
64
|
+
resolveGridRulerMarks(
|
|
65
|
+
viewport,
|
|
66
|
+
'x',
|
|
67
|
+
{ kind: 'ticks', specification: { mode: 'fixed', step: 20 } },
|
|
68
|
+
(tick) => `bar ${tick.position}`,
|
|
69
|
+
)[0],
|
|
70
|
+
).toEqual({ label: 'bar 40', level: 'major', position: 0 });
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('projects horizontal marks consistently in RTL and evaluates each formatter once', () => {
|
|
74
|
+
let formatterCalls = 0;
|
|
75
|
+
|
|
76
|
+
const marks = resolveGridRulerMarks(
|
|
77
|
+
viewport,
|
|
78
|
+
'x',
|
|
79
|
+
{ kind: 'ticks', specification: { mode: 'fixed', step: 20 } },
|
|
80
|
+
(tick) => {
|
|
81
|
+
formatterCalls += 1;
|
|
82
|
+
return `tick ${tick.position}`;
|
|
83
|
+
},
|
|
84
|
+
'rtl',
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
expect(marks.map((mark) => mark.position)).toEqual([300, 260, 220, 180, 140, 100, 60, 20]);
|
|
88
|
+
expect(formatterCalls).toBe(marks.length);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getAxisCategoryTicks,
|
|
3
|
+
getAxisTicks,
|
|
4
|
+
type GridAxisName,
|
|
5
|
+
type GridAxisTick,
|
|
6
|
+
type GridViewport,
|
|
7
|
+
} from '@ankhorage/grid-view';
|
|
8
|
+
|
|
9
|
+
import type { GridRulerMark, GridRulerTickSource } from '../../../types/grid-rulers';
|
|
10
|
+
import { projectGridRulerPosition } from './projectGridRulerPosition';
|
|
11
|
+
|
|
12
|
+
/*** Resolves bounded engine ticks into viewport-pixel ruler marks without changing interaction state. */
|
|
13
|
+
export function resolveGridRulerMarks(
|
|
14
|
+
viewport: GridViewport,
|
|
15
|
+
axis: GridAxisName,
|
|
16
|
+
tickSource: GridRulerTickSource,
|
|
17
|
+
formatLabel?: (tick: GridAxisTick) => string | undefined,
|
|
18
|
+
direction: 'ltr' | 'rtl' = 'ltr',
|
|
19
|
+
): readonly GridRulerMark[] {
|
|
20
|
+
const ticks =
|
|
21
|
+
tickSource.kind === 'categories'
|
|
22
|
+
? getAxisCategoryTicks(viewport, axis, tickSource.categories)
|
|
23
|
+
: getAxisTicks(viewport, axis, tickSource.specification, tickSource.provider);
|
|
24
|
+
|
|
25
|
+
return ticks.map((tick) => {
|
|
26
|
+
const formattedLabel = formatLabel?.(tick);
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
position: projectGridRulerPosition(viewport, axis, tick.position, direction),
|
|
30
|
+
level: tick.level,
|
|
31
|
+
...(tick.label !== undefined || formattedLabel !== undefined
|
|
32
|
+
? { label: formattedLabel ?? tick.label }
|
|
33
|
+
: {}),
|
|
34
|
+
...('categoryId' in tick && typeof tick.categoryId === 'string'
|
|
35
|
+
? { categoryId: tick.categoryId }
|
|
36
|
+
: {}),
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ZoraComponentMeta } from '../../types/authoring';
|
|
2
|
+
|
|
3
|
+
const GRID_RULERS_NOTE =
|
|
4
|
+
'Requires a live viewport and optional executable tick/label providers; available through code APIs, not a serializable manifest node.';
|
|
5
|
+
|
|
6
|
+
/** Passive viewport decorations intentionally remain outside direct manifest authoring. */
|
|
7
|
+
export const gridLineOverlayMeta = {
|
|
8
|
+
name: 'GridLineOverlay',
|
|
9
|
+
category: 'foundation',
|
|
10
|
+
description: 'Projects bounded world-grid lines and explicit guides from a supplied viewport.',
|
|
11
|
+
directManifestNode: false,
|
|
12
|
+
note: GRID_RULERS_NOTE,
|
|
13
|
+
allowedChildren: [],
|
|
14
|
+
props: {},
|
|
15
|
+
} as const satisfies ZoraComponentMeta;
|
|
16
|
+
|
|
17
|
+
/** Rulers accept code-dependent tick and label providers and therefore remain code-only. */
|
|
18
|
+
export const gridRulerMeta = {
|
|
19
|
+
name: 'GridRuler',
|
|
20
|
+
category: 'foundation',
|
|
21
|
+
description: 'Projects visible world-axis ticks into a passive horizontal or vertical ruler.',
|
|
22
|
+
directManifestNode: false,
|
|
23
|
+
note: GRID_RULERS_NOTE,
|
|
24
|
+
allowedChildren: [],
|
|
25
|
+
props: {},
|
|
26
|
+
} as const satisfies ZoraComponentMeta;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
GridGuide,
|
|
3
|
+
GridLineOverlayProps,
|
|
4
|
+
GridRulerMark,
|
|
5
|
+
GridRulerProps,
|
|
6
|
+
GridRulerTickSource,
|
|
7
|
+
} from '../../types/grid-rulers';
|
|
8
|
+
export { GridLineOverlay } from './adapters/inbound/GridLineOverlay';
|
|
9
|
+
export { GridRuler } from './adapters/inbound/GridRuler';
|
|
10
|
+
export { resolveGridRulerMarks } from './application/resolveGridRulerMarks';
|
|
@@ -47,6 +47,7 @@ import {
|
|
|
47
47
|
GameOverlay,
|
|
48
48
|
} from '../game/public';
|
|
49
49
|
import { Gradient } from '../gradient/public';
|
|
50
|
+
import { GridLineOverlay, GridRuler } from '../grid-rulers/public';
|
|
50
51
|
import { GridView, TileGrid } from '../grid-view/public';
|
|
51
52
|
import { Hero } from '../hero/public';
|
|
52
53
|
import { Icon } from '../icon/public';
|
|
@@ -194,6 +195,8 @@ const _ZORA_COMPONENT_REGISTRY = {
|
|
|
194
195
|
EmptyState,
|
|
195
196
|
Explorer,
|
|
196
197
|
FileExplorer,
|
|
198
|
+
GridLineOverlay,
|
|
199
|
+
GridRuler,
|
|
197
200
|
GridView,
|
|
198
201
|
TileGrid,
|
|
199
202
|
MediaExplorer,
|
|
@@ -53,6 +53,7 @@ import { gameMeasurementProbeMeta } from '../game/meta/gameMeasurementProbeMeta'
|
|
|
53
53
|
import { gameMeta } from '../game/meta/gameMeta';
|
|
54
54
|
import { gameOverlayMeta } from '../game/meta/gameOverlayMeta';
|
|
55
55
|
import { gradientMeta } from '../gradient/gradientMeta';
|
|
56
|
+
import { gridLineOverlayMeta, gridRulerMeta } from '../grid-rulers/meta';
|
|
56
57
|
import { gridViewMeta, tileGridMeta } from '../grid-view/meta';
|
|
57
58
|
import { heroMeta } from '../hero/heroMeta';
|
|
58
59
|
import { iconMeta } from '../icon/iconMeta';
|
|
@@ -198,6 +199,8 @@ export const ZORA_COMPONENT_META: ZoraComponentMetaRegistry = finalizeFeatureMet
|
|
|
198
199
|
Explorer: explorerMeta,
|
|
199
200
|
FileExplorer: fileExplorerMeta,
|
|
200
201
|
MediaExplorer: mediaExplorerMeta,
|
|
202
|
+
GridLineOverlay: gridLineOverlayMeta,
|
|
203
|
+
GridRuler: gridRulerMeta,
|
|
201
204
|
GridView: gridViewMeta,
|
|
202
205
|
TileGrid: tileGridMeta,
|
|
203
206
|
Hero: heroMeta,
|
package/src/index.ts
CHANGED
|
@@ -263,6 +263,14 @@ export type {
|
|
|
263
263
|
GradientRendererProviderProps,
|
|
264
264
|
} from './features/gradient/public';
|
|
265
265
|
export { Gradient, GradientRendererProvider } from './features/gradient/public';
|
|
266
|
+
export type {
|
|
267
|
+
GridGuide,
|
|
268
|
+
GridLineOverlayProps,
|
|
269
|
+
GridRulerMark,
|
|
270
|
+
GridRulerProps,
|
|
271
|
+
GridRulerTickSource,
|
|
272
|
+
} from './features/grid-rulers/public';
|
|
273
|
+
export { GridLineOverlay, GridRuler, resolveGridRulerMarks } from './features/grid-rulers/public';
|
|
266
274
|
export type { GridViewProps, TileGridItem, TileGridProps } from './features/grid-view/public';
|
|
267
275
|
export { GridView, layoutTileGrid, TileGrid } from './features/grid-view/public';
|
|
268
276
|
export {
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
GridAxisCategory,
|
|
3
|
+
GridAxisName,
|
|
4
|
+
GridAxisTick,
|
|
5
|
+
GridTickProvider,
|
|
6
|
+
GridTickSpecification,
|
|
7
|
+
GridViewport,
|
|
8
|
+
} from '@ankhorage/grid-view';
|
|
9
|
+
|
|
10
|
+
import type { ZoraBaseProps } from './base';
|
|
11
|
+
|
|
12
|
+
/** A tick source is display-only; it never configures interaction snapping. */
|
|
13
|
+
export type GridRulerTickSource =
|
|
14
|
+
| {
|
|
15
|
+
readonly kind: 'ticks';
|
|
16
|
+
readonly specification: GridTickSpecification;
|
|
17
|
+
readonly provider?: GridTickProvider;
|
|
18
|
+
}
|
|
19
|
+
| { readonly kind: 'categories'; readonly categories: readonly GridAxisCategory[] };
|
|
20
|
+
|
|
21
|
+
/** A projected mark is measured in viewport pixels from the supplied viewport's origin. */
|
|
22
|
+
export interface GridRulerMark {
|
|
23
|
+
readonly position: number;
|
|
24
|
+
readonly level: GridAxisTick['level'];
|
|
25
|
+
readonly label?: string;
|
|
26
|
+
readonly categoryId?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A passive guide belongs to one world-space axis. */
|
|
30
|
+
export interface GridGuide {
|
|
31
|
+
readonly id: string;
|
|
32
|
+
readonly axis: GridAxisName;
|
|
33
|
+
readonly position: number;
|
|
34
|
+
readonly label?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** A single horizontal or vertical passive ruler strip. */
|
|
38
|
+
export interface GridRulerProps extends ZoraBaseProps {
|
|
39
|
+
readonly axis: GridAxisName;
|
|
40
|
+
readonly viewport: GridViewport;
|
|
41
|
+
readonly tickSource: GridRulerTickSource;
|
|
42
|
+
readonly thickness?: number;
|
|
43
|
+
readonly offset?: number;
|
|
44
|
+
readonly position?: 'start' | 'end';
|
|
45
|
+
readonly direction?: 'ltr' | 'rtl';
|
|
46
|
+
readonly accessibilityLabel?: string;
|
|
47
|
+
readonly formatLabel?: (tick: GridAxisTick) => string | undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** A passive overlay of visible major/minor grid lines and explicit guides. */
|
|
51
|
+
export interface GridLineOverlayProps extends ZoraBaseProps {
|
|
52
|
+
readonly viewport: GridViewport;
|
|
53
|
+
/** Mirrors horizontal world positions using the same projection as an RTL GridRuler. */
|
|
54
|
+
readonly direction?: 'ltr' | 'rtl';
|
|
55
|
+
readonly xTickSource?: GridRulerTickSource;
|
|
56
|
+
readonly yTickSource?: GridRulerTickSource;
|
|
57
|
+
readonly guides?: readonly GridGuide[];
|
|
58
|
+
readonly accessibilityLabel?: string;
|
|
59
|
+
}
|
|
@@ -20,11 +20,11 @@ import {
|
|
|
20
20
|
} from "./Accordion-42jfy1a1.js";
|
|
21
21
|
import {
|
|
22
22
|
View2
|
|
23
|
-
} from "./Accordion-
|
|
23
|
+
} from "./Accordion-7tjz25jh.js";
|
|
24
24
|
import {
|
|
25
25
|
Heading2,
|
|
26
26
|
Text3
|
|
27
|
-
} from "./Accordion-
|
|
27
|
+
} from "./Accordion-9w8wg9mf.js";
|
|
28
28
|
import {
|
|
29
29
|
resolveOverlayAnimation
|
|
30
30
|
} from "./Accordion-n7y08rz5.js";
|
|
@@ -7,16 +7,16 @@ import {
|
|
|
7
7
|
} from "./Accordion-42jfy1a1.js";
|
|
8
8
|
import {
|
|
9
9
|
View2
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-7tjz25jh.js";
|
|
11
11
|
import {
|
|
12
12
|
Text3
|
|
13
|
-
} from "./Accordion-
|
|
13
|
+
} from "./Accordion-9w8wg9mf.js";
|
|
14
14
|
import {
|
|
15
15
|
Avatar2
|
|
16
|
-
} from "./Accordion-
|
|
16
|
+
} from "./Accordion-61ntvh14.js";
|
|
17
17
|
import {
|
|
18
18
|
Badge2
|
|
19
|
-
} from "./Accordion-
|
|
19
|
+
} from "./Accordion-7kq500r1.js";
|
|
20
20
|
import {
|
|
21
21
|
useZoraTheme2
|
|
22
22
|
} from "./Accordion-srjya6dz.js";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import {
|
|
3
3
|
Button2
|
|
4
|
-
} from "./Accordion-
|
|
4
|
+
} from "./Accordion-6rrqpb2h.js";
|
|
5
5
|
import {
|
|
6
6
|
withZoraThemeScope
|
|
7
7
|
} from "./Accordion-42jfy1a1.js";
|
|
8
8
|
import {
|
|
9
9
|
View2
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-7tjz25jh.js";
|
|
11
11
|
import {
|
|
12
12
|
Text3
|
|
13
|
-
} from "./Accordion-
|
|
13
|
+
} from "./Accordion-9w8wg9mf.js";
|
|
14
14
|
import {
|
|
15
15
|
useZoraTheme2
|
|
16
16
|
} from "./Accordion-srjya6dz.js";
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import {
|
|
3
3
|
Button2
|
|
4
|
-
} from "./Accordion-
|
|
4
|
+
} from "./Accordion-6rrqpb2h.js";
|
|
5
5
|
import {
|
|
6
6
|
withZoraThemeScope
|
|
7
7
|
} from "./Accordion-42jfy1a1.js";
|
|
8
8
|
import {
|
|
9
9
|
View2
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-7tjz25jh.js";
|
|
11
11
|
import {
|
|
12
12
|
Card2
|
|
13
|
-
} from "./Accordion-
|
|
13
|
+
} from "./Accordion-fjxcn6g9.js";
|
|
14
14
|
import {
|
|
15
15
|
Text3
|
|
16
|
-
} from "./Accordion-
|
|
16
|
+
} from "./Accordion-9w8wg9mf.js";
|
|
17
17
|
import {
|
|
18
18
|
Badge2
|
|
19
|
-
} from "./Accordion-
|
|
19
|
+
} from "./Accordion-7kq500r1.js";
|
|
20
20
|
import {
|
|
21
21
|
useZoraTheme2
|
|
22
22
|
} from "./Accordion-srjya6dz.js";
|
|
@@ -4,16 +4,16 @@ import {
|
|
|
4
4
|
} from "./Accordion-42jfy1a1.js";
|
|
5
5
|
import {
|
|
6
6
|
View2
|
|
7
|
-
} from "./Accordion-
|
|
7
|
+
} from "./Accordion-7tjz25jh.js";
|
|
8
8
|
import {
|
|
9
9
|
ButtonGroup2
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-6rrqpb2h.js";
|
|
11
11
|
import {
|
|
12
12
|
Card2
|
|
13
|
-
} from "./Accordion-
|
|
13
|
+
} from "./Accordion-fjxcn6g9.js";
|
|
14
14
|
import {
|
|
15
15
|
List2
|
|
16
|
-
} from "./Accordion-
|
|
16
|
+
} from "./Accordion-5g05kfmx.js";
|
|
17
17
|
import {
|
|
18
18
|
useZoraTheme2
|
|
19
19
|
} from "./Accordion-srjya6dz.js";
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
} from "./Accordion-42jfy1a1.js";
|
|
8
8
|
import {
|
|
9
9
|
Text3
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-9w8wg9mf.js";
|
|
11
11
|
import {
|
|
12
12
|
View3
|
|
13
13
|
} from "./Accordion-z5a0tx18.js";
|
|
14
14
|
import {
|
|
15
15
|
View2,
|
|
16
16
|
Divider2
|
|
17
|
-
} from "./Accordion-
|
|
17
|
+
} from "./Accordion-7tjz25jh.js";
|
|
18
18
|
import {
|
|
19
19
|
Pressable
|
|
20
20
|
} from "./Accordion-nnv76yff.js";
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./Accordion-wyxmd0n0.js";
|
|
24
24
|
import {
|
|
25
25
|
SectionHeader2
|
|
26
|
-
} from "./Accordion-
|
|
26
|
+
} from "./Accordion-sy1cc5my.js";
|
|
27
27
|
import {
|
|
28
28
|
useZoraTheme2
|
|
29
29
|
} from "./Accordion-srjya6dz.js";
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
} from "./Accordion-42jfy1a1.js";
|
|
5
5
|
import {
|
|
6
6
|
Icon2
|
|
7
|
-
} from "./Accordion-
|
|
7
|
+
} from "./Accordion-b96evb46.js";
|
|
8
8
|
import {
|
|
9
9
|
View2
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-7tjz25jh.js";
|
|
11
11
|
import {
|
|
12
12
|
Text3
|
|
13
|
-
} from "./Accordion-
|
|
13
|
+
} from "./Accordion-9w8wg9mf.js";
|
|
14
14
|
import {
|
|
15
15
|
useZoraTheme2
|
|
16
16
|
} from "./Accordion-srjya6dz.js";
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import {
|
|
3
3
|
TileGrid2
|
|
4
|
-
} from "./Accordion-
|
|
4
|
+
} from "./Accordion-q2z00p5r.js";
|
|
5
5
|
import {
|
|
6
6
|
withZoraThemeScope
|
|
7
7
|
} from "./Accordion-42jfy1a1.js";
|
|
8
8
|
import {
|
|
9
9
|
Icon2
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-b96evb46.js";
|
|
11
11
|
import {
|
|
12
12
|
Image2
|
|
13
|
-
} from "./Accordion-
|
|
13
|
+
} from "./Accordion-a4cma5b6.js";
|
|
14
14
|
import {
|
|
15
15
|
Text3
|
|
16
|
-
} from "./Accordion-
|
|
16
|
+
} from "./Accordion-9w8wg9mf.js";
|
|
17
17
|
import {
|
|
18
18
|
applySelectionIntent
|
|
19
19
|
} from "./Accordion-n4et7etk.js";
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./Accordion-42jfy1a1.js";
|
|
8
8
|
import {
|
|
9
9
|
Icon2
|
|
10
|
-
} from "./Accordion-
|
|
10
|
+
} from "./Accordion-b96evb46.js";
|
|
11
11
|
import {
|
|
12
12
|
View2
|
|
13
|
-
} from "./Accordion-
|
|
13
|
+
} from "./Accordion-7tjz25jh.js";
|
|
14
14
|
import {
|
|
15
15
|
useZoraTheme2
|
|
16
16
|
} from "./Accordion-srjya6dz.js";
|