@salyra-ui/calendar 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/angular/Action.d.ts +13 -0
  4. package/dist/angular/CalendarNumber.d.ts +10 -0
  5. package/dist/angular/CalendarView.d.ts +16 -0
  6. package/dist/angular/Cell.d.ts +15 -0
  7. package/dist/angular/Continuous.d.ts +13 -0
  8. package/dist/angular/DateField.d.ts +15 -0
  9. package/dist/angular/DayTrigger.d.ts +15 -0
  10. package/dist/angular/Grid.d.ts +7 -0
  11. package/dist/angular/Heading.d.ts +11 -0
  12. package/dist/angular/MonthYearSelect.d.ts +11 -0
  13. package/dist/angular/PickerRoot.d.ts +51 -0
  14. package/dist/angular/TimeSegmentField.d.ts +16 -0
  15. package/dist/angular/Week.d.ts +7 -0
  16. package/dist/angular/Weekday.d.ts +15 -0
  17. package/dist/angular/index.d.ts +43 -0
  18. package/dist/angular/index.js +1 -0
  19. package/dist/astro/Action.astro +7 -0
  20. package/dist/astro/Calendar.astro +10 -0
  21. package/dist/astro/Cell.astro +13 -0
  22. package/dist/astro/Continuous.astro +9 -0
  23. package/dist/astro/DayTrigger.astro +7 -0
  24. package/dist/astro/Field.astro +11 -0
  25. package/dist/astro/Grid.astro +3 -0
  26. package/dist/astro/Heading.astro +7 -0
  27. package/dist/astro/MonthSelect.astro +13 -0
  28. package/dist/astro/Number.astro +7 -0
  29. package/dist/astro/Period.astro +10 -0
  30. package/dist/astro/Root.astro +15 -0
  31. package/dist/astro/Segment.astro +10 -0
  32. package/dist/astro/Week.astro +3 -0
  33. package/dist/astro/Weekday.astro +13 -0
  34. package/dist/astro/YearSelect.astro +13 -0
  35. package/dist/browser/calendar.js +1535 -0
  36. package/dist/browser/calendar.min.js +1 -0
  37. package/dist/core/calendar.d.ts +48 -0
  38. package/dist/core/day.d.ts +6 -0
  39. package/dist/core/dom.d.ts +50 -0
  40. package/dist/core/format.d.ts +10 -0
  41. package/dist/core/index.d.ts +9 -0
  42. package/dist/core/index.js +1 -0
  43. package/dist/core/popover.d.ts +6 -0
  44. package/dist/core/scroller.d.ts +13 -0
  45. package/dist/core/store.d.ts +107 -0
  46. package/dist/core/time.d.ts +12 -0
  47. package/dist/core/timezone.d.ts +3 -0
  48. package/dist/react/Calendar.d.ts +29 -0
  49. package/dist/react/Continuous.d.ts +5 -0
  50. package/dist/react/Fields.d.ts +25 -0
  51. package/dist/react/Root.d.ts +10 -0
  52. package/dist/react/context.d.ts +74 -0
  53. package/dist/react/index.d.ts +40 -0
  54. package/dist/react/index.js +1 -0
  55. package/dist/styles.css +115 -0
  56. package/dist/styles.min.css +1 -0
  57. package/dist/svelte/Action.svelte +12 -0
  58. package/dist/svelte/CalendarView.svelte +3 -0
  59. package/dist/svelte/Cell.svelte +5 -0
  60. package/dist/svelte/Continuous.svelte +3 -0
  61. package/dist/svelte/DateRoot.svelte +3 -0
  62. package/dist/svelte/DateTimeRoot.svelte +3 -0
  63. package/dist/svelte/DayTrigger.svelte +14 -0
  64. package/dist/svelte/Field.svelte +11 -0
  65. package/dist/svelte/Grid.svelte +5 -0
  66. package/dist/svelte/Heading.svelte +5 -0
  67. package/dist/svelte/MonthSelect.svelte +19 -0
  68. package/dist/svelte/Navigation.svelte +14 -0
  69. package/dist/svelte/Number.svelte +5 -0
  70. package/dist/svelte/Period.svelte +15 -0
  71. package/dist/svelte/Root.svelte +3 -0
  72. package/dist/svelte/Segment.svelte +14 -0
  73. package/dist/svelte/Time.svelte +12 -0
  74. package/dist/svelte/TimeRoot.svelte +3 -0
  75. package/dist/svelte/Week.svelte +5 -0
  76. package/dist/svelte/Weekday.svelte +10 -0
  77. package/dist/svelte/YearSelect.svelte +19 -0
  78. package/dist/svelte/context.ts +1 -0
  79. package/dist/svelte/index.ts +1 -0
  80. package/dist/vanilla/index.d.ts +41 -0
  81. package/dist/vanilla/index.js +1 -0
  82. package/dist/vue/Calendar.d.ts +106 -0
  83. package/dist/vue/Continuous.d.ts +9 -0
  84. package/dist/vue/Fields.d.ts +145 -0
  85. package/dist/vue/Root.d.ts +112 -0
  86. package/dist/vue/context.d.ts +40 -0
  87. package/dist/vue/index.d.ts +208 -0
  88. package/dist/vue/index.js +1 -0
  89. package/package.json +101 -0
@@ -0,0 +1 @@
1
+ "use client";export*from"../core/index.js";import{createContext as K,useContext as Q,useSyncExternalStore as U}from"react";var h=K(null);function u(){let e=Q(h);if(!e)throw new Error("Picker components require Root");return e}function f(){let e=u();return U(e.subscribe,e.getSnapshot,e.getSnapshot)}function ge(e=0){return f(),u().getMonth(e)}import{useEffect as S,useRef as A,useState as X}from"react";import{createPickerStore as Z}from"../core/index.js";import{jsx as L}from"react/jsx-runtime";function g({store:e,children:n,value:t,onValueChange:o,...r}){let[i]=X(()=>e?(e.setOptions(r),t!==void 0&&e.setValue(t),e):Z({...r,value:t})),l=i.getSnapshot().options;if(r.kind&&r.kind!==l.kind||r.selection&&r.selection!==l.selection)throw new RangeError("Remount Root to change kind or selection");let s=A(o);s.current=o,S(()=>i.subscribeValue(p=>s.current?.(p)),[i]),S(()=>{t!==void 0&&i.setValue(t)},[i,t]);let m=A(r);return S(()=>{let p=new Set([...Object.keys(m.current),...Object.keys(r)]),d={};for(let a of p){if(["kind","selection","defaultValue","month"].includes(a))continue;let T=a;Object.is(m.current[T],r[T])||Object.assign(d,{[a]:r[T]})}m.current=r,Object.keys(d).length&&i.setOptions(d)}),L(h.Provider,{value:i,children:n})}var Ee=e=>L(g,{...e,kind:"date"}),xe=e=>L(g,{...e,kind:"time"}),Pe=e=>L(g,{...e,kind:"datetime"});import{forwardRef as M,useEffect as O,useRef as y}from"react";import{bindCalendar as ee,bindDayTrigger as te,calendarMarkup as ne,dayAttributes as re,dayTriggerAttributes as oe,formatMonth as ie,weekdayLabels as le,escapeHTML as ue}from"../core/index.js";import{jsx as b}from"react/jsx-runtime";function D(e,n){typeof e=="function"?e(n):e&&(e.current=n)}var w=M(function({renderCell:n,renderWeekday:t,weekdays:o,onDayClick:r,onSelect:i,...l},s){let m=u(),p=y(null),d=y({renderCell:n,renderWeekday:t,weekdays:o,onDayClick:r,onSelect:i});return d.current={renderCell:n,renderWeekday:t,weekdays:o,onDayClick:r,onSelect:i},O(()=>ee(p.current,m,{weekdays:o,renderCell:(...a)=>d.current.renderCell?.(...a)??`<button type="button" data-day-trigger data-date="${a[0].date}">${a[0].day}</button>`,renderWeekday:(a,T)=>d.current.renderWeekday?.(a,T)??ue(T),onDayClick:(...a)=>d.current.onDayClick?.(...a),onSelect:a=>d.current.onSelect?.(a)}),[m,o,n,t]),b("div",{...l,"data-part":"calendar",dangerouslySetInnerHTML:{__html:ne(m,{renderCell:n,renderWeekday:t,weekdays:o})},ref:a=>{p.current=a,D(s,a)}})}),V=M(function(n,t){return b("div",{...n,role:"grid","data-part":"grid",ref:t})}),I=M(function(n,t){return b("div",{...n,role:"row","data-part":"week",ref:t})}),N=M(function({date:n,outside:t,...o},r){f();let i=u();return b("div",{...o,...re(i,n,t),role:"gridcell","data-part":"cell",ref:r})}),B=M(function({date:n,children:t,...o},r){return b("span",{...o,"data-part":"number",ref:r,children:t??parseInt(n.slice(-2),10)})}),F=M(function({date:n,outside:t,onSelect:o,...r},i){let l=u(),s=f(),m=y(null),p=y(o);return p.current=o,O(()=>te(m.current,l,n,{outside:t,disabled:r.disabled??!1,onSelect:d=>p.current?.(d)}),[l,n,t,r.disabled]),b("button",{...r,...oe(l,n,t),"data-day-trigger":"",disabled:r.disabled||s.options.disabled||l.getDay(n).disabled,tabIndex:n===s.focusedDate&&!t?0:-1,type:r.type??"button",ref:d=>{m.current=d,D(i,d)}})}),Y=M(function({offset:n=0,children:t,...o},r){let i=f(),l=u();return b("h3",{...o,"aria-live":"polite",ref:r,children:t??ie(l.getMonth(n),i.options.locale)})}),_=M(function({day:n,children:t,...o},r){let i=f(),l=le(i.options.locale,i.options.weekStartsOn).find(s=>s.weekday===n)?.label;return b("span",{...o,role:"columnheader","data-part":"weekday","data-weekday":n,"data-weekend":i.options.weekend.includes(n)?"":void 0,ref:r,children:t??l})});function W({direction:e,children:n,...t}){let o=f(),r=u();return b("button",{...t,type:"button",disabled:t.disabled||o.options.disabled,onClick:i=>{if(t.onClick?.(i),!i.defaultPrevented)try{r.navigate(e)}catch(l){if(!(l instanceof RangeError))throw l}},children:n??(e===1?"Next month":"Previous month")})}import{forwardRef as E,useEffect as x,useRef as P}from"react";import{bindDateField as ae,bindTimeSegment as G,pointFor as R,timeSegmentValue as $}from"../core/index.js";import{Fragment as ce,jsx as c,jsxs as H}from"react/jsx-runtime";function v(e,n){typeof e=="function"?e(n):e&&(e.current=n)}var Ye=E(function({endpoint:n="start",...t},o){let r=u(),i=P(null);return x(()=>ae(i.current,r,n),[r,n,t.disabled,t.readOnly]),c("input",{...t,type:"text",defaultValue:t.defaultValue??R(r.getSnapshot().draft,n)?.date??"",placeholder:t.placeholder??"YYYY-MM-DD",ref:l=>{i.current=l,v(o,l)}})}),k=E(function({part:n,endpoint:t="start",...o},r){let i=u(),l=P(null);return x(()=>G(l.current,i,n,t),[i,n,t,o.disabled,o.readOnly]),c("input",{...o,type:"number","data-part":n,defaultValue:o.defaultValue??$(R(i.getSnapshot().draft,t)?.time,n,i.getSnapshot().options.hourCycle),ref:s=>{l.current=s,v(r,s)}})}),se=E(function({endpoint:n="start",children:t,...o},r){let i=u(),l=P(null);return x(()=>G(l.current,i,"period",n),[i,n,o.disabled]),c("select",{...o,defaultValue:o.defaultValue??$(R(i.getSnapshot().draft,n)?.time,"period",i.getSnapshot().options.hourCycle),ref:s=>{l.current=s,v(r,s)},children:t??H(ce,{children:[c("option",{children:"AM"}),c("option",{children:"PM"})]})})});function _e({endpoint:e="start",className:n,labels:t={},...o}){let r=f();return H("div",{...o,className:n??"sp-time",children:[H("label",{children:[t.hour??"Hours",c(k,{part:"hour",endpoint:e})]}),H("label",{children:[t.minute??"Minutes",c(k,{part:"minute",endpoint:e})]}),r.options.seconds&&H("label",{children:[t.second??"Seconds",c(k,{part:"second",endpoint:e})]}),r.options.hourCycle===12&&H("label",{children:[t.period??"Period",c(se,{endpoint:e})]})]})}function j({action:e,children:n,...t}){let o=u(),r=f();return c("button",{...t,type:"button",disabled:t.disabled||r.options.disabled||r.options.readOnly,onClick:i=>{t.onClick?.(i),i.defaultPrevented||o[e]()},children:n??e})}function q(e){let n=u(),t=f();return c("select",{...e,disabled:e.disabled||t.options.disabled,value:t.visibleMonth.month,onChange:o=>{e.onChange?.(o),o.defaultPrevented||n.setVisibleMonth({...t.visibleMonth,month:globalThis.Number(o.target.value)})},children:e.children??Array.from({length:12},(o,r)=>c("option",{value:r+1,children:r+1},r))})}function J({from:e=1900,to:n=2100,...t}){let o=u(),r=f();return c("select",{...t,disabled:t.disabled||r.options.disabled,value:r.visibleMonth.year,onChange:i=>{t.onChange?.(i),i.defaultPrevented||o.setVisibleMonth({...r.visibleMonth,year:globalThis.Number(i.target.value)})},children:t.children??Array.from({length:n-e+1},(i,l)=>c("option",{value:e+l,children:e+l},l))})}function z(e){let n=f();return c("output",{...e,children:e.children??JSON.stringify(n.value)})}import{useRef as de,useEffect as fe,useState as me}from"react";import{bindMonthScroller as pe,monthScrollerMarkup as be}from"../core/index.js";import{jsx as Me}from"react/jsx-runtime";function C({options:e={},...n}){let t=u(),o=de(null),[r]=me(()=>be(t,e));return fe(()=>pe(o.current,t,e),[t,e]),Me("div",{...n,ref:o,dangerouslySetInnerHTML:{__html:r}})}var Te={Continuous:C,Action:j,MonthSelect:q,YearSelect:J,Output:z,Grid:V,Week:I,Cell:N,Number:B,DayTrigger:F,Heading:Y,Weekday:_,Navigation:W},et={Root:g,...Te,View:w};export{j as Action,et as Calendar,w as CalendarView,N as Cell,C as Continuous,Ee as DateRoot,Pe as DateTimeRoot,F as DayTrigger,Ye as Field,V as Grid,Y as Heading,q as MonthSelect,W as Navigation,B as Number,z as Output,se as Period,h as PickerContext,g as Root,k as Segment,_e as Time,xe as TimeRoot,I as Week,_ as Weekday,J as YearSelect,ge as useCalendarMonth,f as usePicker,u as usePickerStore};
@@ -0,0 +1,115 @@
1
+ :where(.sp-calendar) {
2
+ --sp-accent: #e4002b;
3
+ --sp-selected-text: #fff;
4
+ --sp-range: #fce5ea;
5
+ --sp-outside: #737373;
6
+ --sp-border: #dddde2;
7
+ color: #181818;
8
+ font-family:
9
+ "Helvetica Neue",
10
+ Helvetica,
11
+ Arial,
12
+ sans-serif;
13
+ }
14
+ .sp-calendar {
15
+ display: grid;
16
+ grid-template-columns: repeat(var(--sp-months, 1), minmax(0, 1fr));
17
+ gap: 24px;
18
+ }
19
+ .sp-month {
20
+ min-width: 0;
21
+ }
22
+ .sp-month h3 {
23
+ margin: 0 0 20px;
24
+ font-size: 15px;
25
+ font-weight: 600;
26
+ }
27
+ .sp-grid {
28
+ width: 100%;
29
+ table-layout: fixed;
30
+ border-collapse: collapse;
31
+ }
32
+ .sp-grid th {
33
+ height: 32px;
34
+ font-size: 11px;
35
+ font-weight: 500;
36
+ color: #656565;
37
+ text-align: center;
38
+ }
39
+ .sp-grid td {
40
+ padding: 2px 0;
41
+ position: relative;
42
+ height: 40px;
43
+ text-align: center;
44
+ }
45
+ .sp-grid [data-day-trigger] {
46
+ position: relative;
47
+ z-index: 1;
48
+ display: inline-grid;
49
+ place-items: center;
50
+ width: 36px;
51
+ height: 36px;
52
+ border: 1px solid transparent;
53
+ border-radius: var(--sp-day-radius, 4px);
54
+ background: transparent;
55
+ color: inherit;
56
+ font: inherit;
57
+ font-size: 13px;
58
+ font-variant-numeric: tabular-nums;
59
+ cursor: pointer;
60
+ }
61
+ .sp-grid [data-day-trigger]:hover {
62
+ border-color: var(--sp-border);
63
+ }
64
+ .sp-grid [data-part=cell][data-in-range] {
65
+ background: var(--sp-range);
66
+ }
67
+ .sp-grid [data-part=cell][data-selected] [data-day-trigger] {
68
+ background: var(--sp-accent);
69
+ color: var(--sp-selected-text);
70
+ }
71
+ .sp-grid [data-part=cell][data-outside]:not([data-selected]) {
72
+ color: var(--sp-outside);
73
+ }
74
+ .sp-grid [data-part=cell][data-today]:not([data-selected]) [data-part=number] {
75
+ text-decoration: underline;
76
+ text-underline-offset: 4px;
77
+ }
78
+ .sp-grid [data-day-trigger]:focus-visible {
79
+ outline: 2px solid var(--sp-accent);
80
+ outline-offset: 2px;
81
+ }
82
+ .sp-grid [data-day-trigger]:disabled {
83
+ opacity: 0.3;
84
+ cursor: default;
85
+ }
86
+ .sp-time {
87
+ display: flex;
88
+ gap: 12px;
89
+ flex-wrap: wrap;
90
+ }
91
+ .sp-time label {
92
+ display: grid;
93
+ gap: 8px;
94
+ font: inherit;
95
+ font-size: 12px;
96
+ }
97
+ .sp-time input,
98
+ .sp-time select {
99
+ width: 72px;
100
+ min-height: 40px;
101
+ border: 1px solid #dddde2;
102
+ padding: 8px;
103
+ box-sizing: border-box;
104
+ background: transparent;
105
+ color: inherit;
106
+ font: inherit;
107
+ }
108
+ .sp-time [aria-invalid=true] {
109
+ outline: 2px solid #e4002b;
110
+ }
111
+ @media (max-width: 640px) {
112
+ .sp-calendar {
113
+ grid-template-columns: 1fr;
114
+ }
115
+ }
@@ -0,0 +1 @@
1
+ :where(.sp-calendar){--sp-accent: #e4002b;--sp-selected-text: #fff;--sp-range: #fce5ea;--sp-outside: #737373;--sp-border: #dddde2;color:#181818;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.sp-calendar{display:grid;grid-template-columns:repeat(var(--sp-months, 1),minmax(0,1fr));gap:24px}.sp-month{min-width:0}.sp-month h3{margin:0 0 20px;font-size:15px;font-weight:600}.sp-grid{width:100%;table-layout:fixed;border-collapse:collapse}.sp-grid th{height:32px;font-size:11px;font-weight:500;color:#656565;text-align:center}.sp-grid td{padding:2px 0;position:relative;height:40px;text-align:center}.sp-grid [data-day-trigger]{position:relative;z-index:1;display:inline-grid;place-items:center;width:36px;height:36px;border:1px solid transparent;border-radius:var(--sp-day-radius, 4px);background:transparent;color:inherit;font:inherit;font-size:13px;font-variant-numeric:tabular-nums;cursor:pointer}.sp-grid [data-day-trigger]:hover{border-color:var(--sp-border)}.sp-grid [data-part=cell][data-in-range]{background:var(--sp-range)}.sp-grid [data-part=cell][data-selected] [data-day-trigger]{background:var(--sp-accent);color:var(--sp-selected-text)}.sp-grid [data-part=cell][data-outside]:not([data-selected]){color:var(--sp-outside)}.sp-grid [data-part=cell][data-today]:not([data-selected]) [data-part=number]{text-decoration:underline;text-underline-offset:4px}.sp-grid [data-day-trigger]:focus-visible{outline:2px solid var(--sp-accent);outline-offset:2px}.sp-grid [data-day-trigger]:disabled{opacity:.3;cursor:default}.sp-time{display:flex;gap:12px;flex-wrap:wrap}.sp-time label{display:grid;gap:8px;font:inherit;font-size:12px}.sp-time input,.sp-time select{width:72px;min-height:40px;border:1px solid #dddde2;padding:8px;box-sizing:border-box;background:transparent;color:inherit;font:inherit}.sp-time [aria-invalid=true]{outline:2px solid #e4002b}@media(max-width:640px){.sp-calendar{grid-template-columns:1fr}}
@@ -0,0 +1,12 @@
1
+ <script lang="ts">import type{HTMLButtonAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{usePicker,usePickerStore}from"./context";let{action,children,...attributes}:HTMLButtonAttributes&{action:"apply"|"cancel"|"clear";children?:Snippet}=$props();const store=usePickerStore(),state=usePicker();</script>
2
+
3
+ <button
4
+ {...attributes}
5
+ type="button"
6
+ disabled={attributes.disabled || $state.options.disabled}
7
+ onclick={(event) => {
8
+ attributes.onclick?.(event);
9
+ if (!event.defaultPrevented) store[action]();
10
+ }}
11
+ >{#if children}{@render children()}{:else}{action}{/if}</button
12
+ >
@@ -0,0 +1,3 @@
1
+ <script lang="ts">import{untrack}from"svelte";import{calendarMarkup,bindCalendar,type CalendarRenderOptions}from"../core/index.js";import{usePickerStore}from"./context";let{options={},...attributes}:CalendarRenderOptions&{options?:CalendarRenderOptions;[key:string]:unknown}=$props();const store=usePickerStore();let element:HTMLDivElement;const html=untrack(()=>calendarMarkup(store,options));$effect(()=>bindCalendar(element,store,options));</script>
2
+
3
+ <div {...attributes} data-part="calendar" bind:this={element}>{@html html}</div>
@@ -0,0 +1,5 @@
1
+ <script lang="ts">import type{HTMLAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{dayAttributes,type PickerSnapshot}from"../core/index.js";import{usePicker,usePickerStore}from"./context";let{date,outside=false,children,...attributes}:HTMLAttributes<HTMLDivElement>&{date:string;outside?:boolean;children?:Snippet<[PickerSnapshot]>}=$props();const store=usePickerStore(),picker=usePicker();const flags=$derived.by(()=>{$picker;return dayAttributes(store,date,outside)});</script>
2
+
3
+ <div {...attributes} {...flags} role="gridcell" data-part="cell">
4
+ {#if children}{@render children($picker)}{/if}
5
+ </div>
@@ -0,0 +1,3 @@
1
+ <script lang="ts">import{untrack}from"svelte";import type{HTMLAttributes}from"svelte/elements";import{bindMonthScroller,monthScrollerMarkup,type MonthScrollerOptions}from"../core/index.js";import{usePickerStore}from"./context";let{options={},...attributes}:HTMLAttributes<HTMLDivElement>&{options?:MonthScrollerOptions}=$props();const store=usePickerStore();let element:HTMLDivElement;const html=untrack(()=>monthScrollerMarkup(store,options));$effect(()=>bindMonthScroller(element,store,options));</script>
2
+
3
+ <div {...attributes} bind:this={element}>{@html html}</div>
@@ -0,0 +1,3 @@
1
+ <script lang="ts">import Root from"./Root.svelte";import type{ComponentProps}from"svelte";let{options={},value=$bindable(),...props}:ComponentProps<typeof Root>=$props();</script>
2
+
3
+ <Root {...props} bind:value options={{ ...options, kind: "date" }} />
@@ -0,0 +1,3 @@
1
+ <script lang="ts">import Root from"./Root.svelte";import type{ComponentProps}from"svelte";let{options={},value=$bindable(),...props}:ComponentProps<typeof Root>=$props();</script>
2
+
3
+ <Root {...props} bind:value options={{ ...options, kind: "datetime" }} />
@@ -0,0 +1,14 @@
1
+ <script lang="ts">import type{HTMLButtonAttributes}from"svelte/elements";import{onMount,type Snippet}from"svelte";import{bindDayTrigger,dayTriggerAttributes}from"../core/index.js";import{usePickerStore,usePicker}from"./context";let{date,outside=false,onSelect,children,...attributes}:HTMLButtonAttributes&{date:string;outside?:boolean;onSelect?:(date:string)=>void;children?:Snippet}=$props();const store=usePickerStore();const picker=usePicker();let element:HTMLButtonElement;const flags=$derived.by(()=>{$picker;return dayTriggerAttributes(store,date,outside)});$effect(()=>bindDayTrigger(element,store,date,{outside,onSelect,disabled:attributes.disabled??false}));</script>
2
+
3
+ <button
4
+ {...attributes}
5
+ {...flags}
6
+ data-day-trigger
7
+ disabled={attributes.disabled || store.getDay(date).disabled}
8
+ tabindex={$picker.focusedDate === date && !outside ? 0 : -1}
9
+ type="button"
10
+ bind:this={element}
11
+ >{#if children}{@render children()}{:else}{Number(
12
+ date.slice(-2),
13
+ )}{/if}</button
14
+ >
@@ -0,0 +1,11 @@
1
+ <script lang="ts">import type{HTMLInputAttributes}from"svelte/elements";import{bindDateField,pointFor,type Endpoint}from"../core/index.js";import{usePickerStore}from"./context";let{endpoint="start",...attributes}:HTMLInputAttributes&{endpoint?:Endpoint}=$props();const store=usePickerStore();let element:HTMLInputElement;$effect(()=>{attributes.disabled;attributes.readonly;return bindDateField(element,store,endpoint)});</script>
2
+
3
+ <input
4
+ {...attributes}
5
+ value={attributes.value ??
6
+ pointFor(store.getSnapshot().draft, endpoint)?.date ??
7
+ ""}
8
+ type="text"
9
+ placeholder={attributes.placeholder ?? "YYYY-MM-DD"}
10
+ bind:this={element}
11
+ />
@@ -0,0 +1,5 @@
1
+ <script lang="ts">import type{HTMLAttributes}from"svelte/elements";import type{Snippet}from"svelte";let{children,...attributes}:HTMLAttributes<HTMLDivElement>&{children?:Snippet}=$props();</script>
2
+
3
+ <div {...attributes} role="grid" data-part="grid">
4
+ {#if children}{@render children()}{/if}
5
+ </div>
@@ -0,0 +1,5 @@
1
+ <script lang="ts">import type{HTMLAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{formatMonth}from"../core/index.js";import{usePicker,usePickerStore}from"./context";let{offset=0,children,...attributes}:HTMLAttributes<HTMLHeadingElement>&{offset?:number;children?:Snippet}=$props();const store=usePickerStore(),state=usePicker();const label=$derived.by(()=>{$state;return formatMonth(store.getMonth(offset),$state.options.locale)});</script>
2
+
3
+ <h3 {...attributes} aria-live="polite">
4
+ {#if children}{@render children()}{:else}{label}{/if}
5
+ </h3>
@@ -0,0 +1,19 @@
1
+ <script lang="ts">import type{HTMLSelectAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{usePicker,usePickerStore}from"./context";let{children,...attributes}:HTMLSelectAttributes&{children?:Snippet}=$props();const store=usePickerStore(),state=usePicker();</script>
2
+
3
+ <select
4
+ {...attributes}
5
+ disabled={attributes.disabled || $state.options.disabled}
6
+ value={$state.visibleMonth.month}
7
+ onchange={(event) => {
8
+ attributes.onchange?.(event);
9
+ if (!event.defaultPrevented)
10
+ store.setVisibleMonth({
11
+ ...$state.visibleMonth,
12
+ month: Number(event.currentTarget.value),
13
+ });
14
+ }}
15
+ >
16
+ {#if children}{@render children()}{:else}{#each Array.from({ length: 12 }, (_, i) => i + 1) as value}<option
17
+ {value}>{value}</option
18
+ >{/each}{/if}
19
+ </select>
@@ -0,0 +1,14 @@
1
+ <script lang="ts">import type{HTMLButtonAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{usePicker,usePickerStore}from"./context";let{direction,children,...attributes}:HTMLButtonAttributes&{direction:-1|1;children?:Snippet}=$props();const store=usePickerStore(),state=usePicker();</script>
2
+
3
+ <button
4
+ {...attributes}
5
+ type="button"
6
+ disabled={attributes.disabled || $state.options.disabled}
7
+ onclick={(event) => {
8
+ attributes.onclick?.(event);
9
+ if (!event.defaultPrevented) store.navigate(direction);
10
+ }}
11
+ >{#if children}{@render children()}{:else}{direction < 0
12
+ ? "Previous month"
13
+ : "Next month"}{/if}</button
14
+ >
@@ -0,0 +1,5 @@
1
+ <script lang="ts">import type{HTMLAttributes}from"svelte/elements";import type{Snippet}from"svelte";let{date,children,...attributes}:HTMLAttributes<HTMLSpanElement>&{date:string;children?:Snippet}=$props();</script>
2
+
3
+ <span {...attributes} data-part="number"
4
+ >{#if children}{@render children()}{:else}{Number(date.slice(-2))}{/if}</span
5
+ >
@@ -0,0 +1,15 @@
1
+ <script lang="ts">import type{HTMLSelectAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{bindTimeSegment,pointFor,timeSegmentValue,type Endpoint}from"../core/index.js";import{usePickerStore}from"./context";let{endpoint="start",children,...attributes}:HTMLSelectAttributes&{endpoint?:Endpoint;children?:Snippet}=$props();const store=usePickerStore();let element:HTMLSelectElement;$effect(()=>{attributes.disabled;return bindTimeSegment(element,store,"period",endpoint)});</script>
2
+
3
+ <select
4
+ {...attributes}
5
+ value={attributes.value ??
6
+ timeSegmentValue(
7
+ pointFor(store.getSnapshot().draft, endpoint)?.time,
8
+ "period",
9
+ store.getSnapshot().options.hourCycle,
10
+ )}
11
+ bind:this={element}
12
+ >{#if children}{@render children()}{:else}<option>AM</option><option
13
+ >PM</option
14
+ >{/if}</select
15
+ >
@@ -0,0 +1,3 @@
1
+ <script lang="ts">import{onMount,untrack,type Snippet}from"svelte";import{createPickerStore,type PickerStore,type PickerOptions,type PickerValue}from"../core/index.js";import{providePicker}from"./context";let{store:provided,options={},value=$bindable(),onValueChange,children}:{store?:PickerStore;options?:PickerOptions;value?:PickerValue;onValueChange?:(value:PickerValue)=>void;children:Snippet}=$props();const store=providePicker(untrack(()=>{if(!provided)return createPickerStore({...options,value:value===undefined?options.value:value});provided.setOptions(options);if(value!==undefined)provided.setValue(value);return provided}));$effect(()=>{if(value!==undefined)store.setValue(value)});$effect(()=>{store.setOptions(options)});onMount(()=>store.subscribeValue(next=>{value=next;onValueChange?.(next)}));</script>
2
+
3
+ {@render children()}
@@ -0,0 +1,14 @@
1
+ <script lang="ts">import type{HTMLInputAttributes}from"svelte/elements";import{bindTimeSegment,pointFor,timeSegmentValue,type Endpoint,type TimeSegment}from"../core/index.js";import{usePickerStore}from"./context";let{part="hour",endpoint="start",...attributes}:HTMLInputAttributes&{part?:Exclude<TimeSegment,"period">;endpoint?:Endpoint}=$props();const store=usePickerStore();let element:HTMLInputElement;$effect(()=>{attributes.disabled;attributes.readonly;return bindTimeSegment(element,store,part,endpoint)});</script>
2
+
3
+ <input
4
+ {...attributes}
5
+ value={attributes.value ??
6
+ timeSegmentValue(
7
+ pointFor(store.getSnapshot().draft, endpoint)?.time,
8
+ part,
9
+ store.getSnapshot().options.hourCycle,
10
+ )}
11
+ type="number"
12
+ data-part={part}
13
+ bind:this={element}
14
+ />
@@ -0,0 +1,12 @@
1
+ <script lang="ts">import Segment from"./Segment.svelte";import Period from"./Period.svelte";import{usePicker}from"./context";import type{Endpoint,TimeSegment}from"../core/index.js";let{endpoint="start",labels={},...attributes}:{endpoint?:Endpoint;labels?:Partial<Record<TimeSegment,string>>;[key:string]:unknown}=$props();const state=usePicker();</script>
2
+
3
+ <div class="sp-time" {...attributes}>
4
+ <label>{labels.hour ?? "Hours"}<Segment part="hour" {endpoint} /></label
5
+ ><label
6
+ >{labels.minute ?? "Minutes"}<Segment part="minute" {endpoint} /></label
7
+ >{#if $state.options.seconds}<label
8
+ >{labels.second ?? "Seconds"}<Segment part="second" {endpoint} /></label
9
+ >{/if}{#if $state.options.hourCycle === 12}<label
10
+ >{labels.period ?? "Period"}<Period {endpoint} /></label
11
+ >{/if}
12
+ </div>
@@ -0,0 +1,3 @@
1
+ <script lang="ts">import Root from"./Root.svelte";import type{ComponentProps}from"svelte";let{options={},value=$bindable(),...props}:ComponentProps<typeof Root>=$props();</script>
2
+
3
+ <Root {...props} bind:value options={{ ...options, kind: "time" }} />
@@ -0,0 +1,5 @@
1
+ <script lang="ts">import type{HTMLAttributes}from"svelte/elements";import type{Snippet}from"svelte";let{children,...attributes}:HTMLAttributes<HTMLDivElement>&{children?:Snippet}=$props();</script>
2
+
3
+ <div {...attributes} role="row" data-part="week">
4
+ {#if children}{@render children()}{/if}
5
+ </div>
@@ -0,0 +1,10 @@
1
+ <script lang="ts">import type{HTMLAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{weekdayLabels}from"../core/index.js";import{usePicker}from"./context";let{day,children,...attributes}:HTMLAttributes<HTMLSpanElement>&{day:number;children?:Snippet}=$props();const state=usePicker();const label=$derived(weekdayLabels($state.options.locale,$state.options.weekStartsOn).find(d=>d.weekday===day)?.label);</script>
2
+
3
+ <span
4
+ {...attributes}
5
+ role="columnheader"
6
+ data-part="weekday"
7
+ data-weekday={day}
8
+ data-weekend={$state.options.weekend.includes(day) ? "" : undefined}
9
+ >{#if children}{@render children()}{:else}{label}{/if}</span
10
+ >
@@ -0,0 +1,19 @@
1
+ <script lang="ts">import type{HTMLSelectAttributes}from"svelte/elements";import type{Snippet}from"svelte";import{usePicker,usePickerStore}from"./context";let{from=1900,to=2100,children,...attributes}:HTMLSelectAttributes&{from?:number;to?:number;children?:Snippet}=$props();const store=usePickerStore(),state=usePicker();</script>
2
+
3
+ <select
4
+ {...attributes}
5
+ disabled={attributes.disabled || $state.options.disabled}
6
+ value={$state.visibleMonth.year}
7
+ onchange={(event) => {
8
+ attributes.onchange?.(event);
9
+ if (!event.defaultPrevented)
10
+ store.setVisibleMonth({
11
+ ...$state.visibleMonth,
12
+ year: Number(event.currentTarget.value),
13
+ });
14
+ }}
15
+ >
16
+ {#if children}{@render children()}{:else}{#each Array.from({ length: to - from + 1 }, (_, i) => from + i) as value}<option
17
+ {value}>{value}</option
18
+ >{/each}{/if}
19
+ </select>
@@ -0,0 +1 @@
1
+ import{getContext,setContext}from"svelte";import{readable}from"svelte/store";import type{PickerStore}from"../core/index.js";const key=Symbol("Salyra calendar");export function providePicker(store:PickerStore){setContext(key,store);return store}export function usePickerStore(){const store=getContext<PickerStore>(key);if(!store)throw new Error("Picker components require Root");return store}export function usePicker(){const store=usePickerStore();return readable(store.getSnapshot(),set=>store.subscribe(()=>set(store.getSnapshot())))}
@@ -0,0 +1 @@
1
+ export*from"../core/index.js";export*from"./context";import Root from"./Root.svelte";import View from"./CalendarView.svelte";import Time from"./Time.svelte";import Grid from"./Grid.svelte";import Week from"./Week.svelte";import Cell from"./Cell.svelte";import Number from"./Number.svelte";import DayTrigger from"./DayTrigger.svelte";import Heading from"./Heading.svelte";import Weekday from"./Weekday.svelte";import Navigation from"./Navigation.svelte";import Field from"./Field.svelte";import Segment from"./Segment.svelte";import Period from"./Period.svelte";import MonthSelect from"./MonthSelect.svelte";import YearSelect from"./YearSelect.svelte";import Action from"./Action.svelte";export{Root,View,Time,Grid,Week,Cell,Number,DayTrigger,Heading,Weekday,Navigation,Field,Segment,Period,MonthSelect,YearSelect,Action};const parts={Continuous,Grid,Week,Cell,Number,DayTrigger,Heading,Weekday,Navigation,MonthSelect,YearSelect,Action};export const Calendar={Root,View,...parts};import DateRoot from"./DateRoot.svelte";import TimeRoot from"./TimeRoot.svelte";import DateTimeRoot from"./DateTimeRoot.svelte";import Continuous from"./Continuous.svelte";export{Continuous};export{DateRoot,TimeRoot,DateTimeRoot};
@@ -0,0 +1,41 @@
1
+ export * from "../core";
2
+ import { type PickerStore, type PickerOptions, type Endpoint } from "../core";
3
+ export declare function mountPicker(root: HTMLElement, options?: PickerOptions | PickerStore): {
4
+ store: {
5
+ getSnapshot: () => import(".").PickerSnapshot;
6
+ subscribe(fn: () => void): () => void;
7
+ subscribeValue(fn: (v: import(".").PickerValue) => void): () => void;
8
+ getMonth(offset?: number): import(".").CalendarMonth;
9
+ getDay(date: string): {
10
+ selected: boolean;
11
+ rangeStart: boolean;
12
+ rangeEnd: boolean;
13
+ inRange: boolean;
14
+ preview: boolean;
15
+ disabled: boolean;
16
+ today: boolean;
17
+ weekend: boolean;
18
+ focused: boolean;
19
+ };
20
+ setVisibleMonth(next: import(".").Month): void;
21
+ navigate(count: number): void;
22
+ focus(date: string): void;
23
+ moveFocus(key: string, shift?: boolean): boolean;
24
+ hover(date: string | null): void;
25
+ selectDate(date: string): boolean;
26
+ setDate(date: string, endpoint?: Endpoint): boolean;
27
+ setTime(time: string, endpoint?: Endpoint): boolean;
28
+ setDayOffset(offset: number, endpoint?: Endpoint): boolean;
29
+ setEndpoint(endpoint: Endpoint): void;
30
+ setValue(value: import(".").PickerValue): void;
31
+ apply(): boolean;
32
+ cancel(): void;
33
+ clear(): void;
34
+ setOpen(open: boolean): void;
35
+ setOptions(patch: Partial<PickerOptions>): void;
36
+ validate: () => string | null;
37
+ destroy(): void;
38
+ readonly cacheSize: number;
39
+ };
40
+ destroy(): void;
41
+ };
@@ -0,0 +1 @@
1
+ export*from"../core/index.js";import{bindCalendar as m,bindMonthScroller as b,bindDateField as g,bindTimeSegment as E,bindDayTrigger as v,createPickerStore as y,attribute as h,formatMonth as S,dayAttributes as k}from"../core/index.js";function T(o,c={}){let l="getSnapshot"in c,a=l?c:y(c),r=[],n=t=>[...o.querySelectorAll(t)].filter(e=>!e.parentElement?.closest("[data-picker-root]")||e.parentElement.closest("[data-picker-root]")===o);h(o,"data-picker-root",!0);for(let t of n("[data-continuous]"))r.push(b(t,a,JSON.parse(t.dataset.continuous??"{}")));for(let t of n("[data-calendar]"))r.push(m(t,a,JSON.parse(t.dataset.calendarOptions??"{}")));for(let t of n("[data-day-trigger]"))t.closest("[data-calendar]")||r.push(v(t,a,t.dataset.date));for(let t of n("[data-date-field]"))r.push(g(t,a,t.dataset.endpoint??"start"));for(let t of n("[data-time-segment]"))r.push(E(t,a,t.dataset.timeSegment,t.dataset.endpoint??"start"));let d=t=>{if(t.defaultPrevented)return;let e=t.target.closest("[data-picker-action]");if(!e||!o.contains(e)||e.closest("[data-picker-root]")!==o||a.getSnapshot().options.disabled)return;let s=e.dataset.pickerAction;try{s==="previous"?a.navigate(-1):s==="next"?a.navigate(1):s==="open"?a.setOpen(!0):(s==="cancel"||s==="apply"||s==="clear")&&a[s]()}catch(u){if(!(u instanceof RangeError))throw u}},f=t=>{let e=t.target;if(!(e.closest("[data-picker-root]")!==o||a.getSnapshot().options.disabled))try{e.hasAttribute("data-month-select")&&a.setVisibleMonth({...a.getSnapshot().visibleMonth,month:Number(e.value)}),e.hasAttribute("data-year-select")&&a.setVisibleMonth({...a.getSnapshot().visibleMonth,year:Number(e.value)}),e.hasAttribute("data-day-offset")&&a.setDayOffset(Number(e.value),e.dataset.endpoint??"end")}catch(i){if(!(i instanceof RangeError))throw i}},p=()=>{let t=a.getSnapshot();for(let e of n("[data-calendar-cell]"))for(let[i,s]of Object.entries(k(a,e.dataset.date,e.hasAttribute("data-outside"))))h(e,i,s);for(let e of n("[data-picker-output]"))e.textContent=JSON.stringify(t.value,null,2);for(let e of n("[data-picker-error]"))e.textContent=t.error??"",e.hidden=!t.error;for(let e of n("[data-month-heading]"))e.textContent=S(t.visibleMonth,t.options.locale);for(let e of n("[data-month-select]"))e.value=String(t.visibleMonth.month);for(let e of n("[data-year-select]"))e.value=String(t.visibleMonth.year);for(let e of n("[data-picker-action], [data-month-select], [data-year-select], [data-day-offset]"))e.disabled=!!t.options.disabled};return p(),r.push(a.subscribe(p)),o.addEventListener("click",d),o.addEventListener("change",f),{store:a,destroy(){r.forEach(t=>t()),o.removeEventListener("click",d),o.removeEventListener("change",f),l||a.destroy()}}}export{T as mountPicker};
@@ -0,0 +1,106 @@
1
+ import { type PropType } from "vue";
2
+ import { type CalendarRenderOptions } from "../core";
3
+ export declare const CalendarView: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ options: PropType<CalendarRenderOptions>;
5
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
6
+ [key: string]: any;
7
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
8
+ options: PropType<CalendarRenderOptions>;
9
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
10
+ export declare const Grid: import("vue").DefineComponent<{}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
11
+ [key: string]: any;
12
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, Week: import("vue").DefineComponent<{}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
13
+ [key: string]: any;
14
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
15
+ export declare const Cell: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
16
+ date: {
17
+ type: StringConstructor;
18
+ required: true;
19
+ };
20
+ outside: BooleanConstructor;
21
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
22
+ [key: string]: any;
23
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
24
+ date: {
25
+ type: StringConstructor;
26
+ required: true;
27
+ };
28
+ outside: BooleanConstructor;
29
+ }>> & Readonly<{}>, {
30
+ outside: boolean;
31
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
32
+ export declare const NumberLabel: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
33
+ date: {
34
+ type: StringConstructor;
35
+ required: true;
36
+ };
37
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
38
+ [key: string]: any;
39
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
40
+ date: {
41
+ type: StringConstructor;
42
+ required: true;
43
+ };
44
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
45
+ export declare const DayTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
46
+ date: {
47
+ type: StringConstructor;
48
+ required: true;
49
+ };
50
+ outside: BooleanConstructor;
51
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
52
+ [key: string]: any;
53
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "select"[], "select", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
54
+ date: {
55
+ type: StringConstructor;
56
+ required: true;
57
+ };
58
+ outside: BooleanConstructor;
59
+ }>> & Readonly<{
60
+ onSelect?: ((...args: any[]) => any) | undefined;
61
+ }>, {
62
+ outside: boolean;
63
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
64
+ export declare const Heading: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
65
+ offset: {
66
+ type: NumberConstructor;
67
+ default: number;
68
+ };
69
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
70
+ [key: string]: any;
71
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
72
+ offset: {
73
+ type: NumberConstructor;
74
+ default: number;
75
+ };
76
+ }>> & Readonly<{}>, {
77
+ offset: number;
78
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
79
+ export declare const Weekday: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
80
+ day: {
81
+ type: NumberConstructor;
82
+ required: true;
83
+ };
84
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
85
+ [key: string]: any;
86
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
87
+ day: {
88
+ type: NumberConstructor;
89
+ required: true;
90
+ };
91
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
92
+ export declare const Navigation: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
93
+ direction: {
94
+ type: NumberConstructor;
95
+ default: number;
96
+ };
97
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
98
+ [key: string]: any;
99
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
100
+ direction: {
101
+ type: NumberConstructor;
102
+ default: number;
103
+ };
104
+ }>> & Readonly<{}>, {
105
+ direction: number;
106
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -0,0 +1,9 @@
1
+ import { type PropType } from "vue";
2
+ import { type MonthScrollerOptions } from "../core";
3
+ export declare const Continuous: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ options: PropType<MonthScrollerOptions>;
5
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
6
+ [key: string]: any;
7
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
8
+ options: PropType<MonthScrollerOptions>;
9
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;