@koine/react 2.0.0-beta.132 → 2.0.0-beta.134
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/FaviconTags.cjs.js +1 -10
- package/FaviconTags.d.ts +10 -0
- package/FaviconTags.esm.js +1 -10
- package/Meta.cjs.js +1 -10
- package/Meta.d.ts +10 -0
- package/Meta.esm.js +1 -10
- package/NoJs.cjs.js +1 -1
- package/NoJs.esm.js +1 -1
- package/Polymorphic.d.ts +13 -0
- package/calendar/CalendarDaygridCell.cjs.js +1 -20
- package/calendar/CalendarDaygridCell.esm.js +1 -20
- package/calendar/CalendarDaygridNav.cjs.js +1 -1
- package/calendar/CalendarDaygridNav.esm.js +1 -1
- package/calendar/CalendarDaygridTable.cjs.js +1 -4
- package/calendar/CalendarDaygridTable.esm.js +1 -4
- package/calendar/CalendarLegend.cjs.js +1 -8
- package/calendar/CalendarLegend.esm.js +1 -8
- package/calendar/calendar-api-google.cjs.js +1 -15
- package/calendar/calendar-api-google.d.ts +8 -0
- package/calendar/calendar-api-google.esm.js +1 -15
- package/calendar/types.d.ts +19 -0
- package/calendar/useCalendar.cjs.js +1 -13
- package/calendar/useCalendar.d.ts +14 -0
- package/calendar/useCalendar.esm.js +1 -13
- package/calendar/useDateLocale.cjs.js +1 -18
- package/calendar/useDateLocale.d.ts +6 -0
- package/calendar/useDateLocale.esm.js +1 -18
- package/calendar/utils.cjs.js +1 -18
- package/calendar/utils.esm.js +1 -18
- package/classed.cjs.js +1 -42
- package/classed.d.ts +19 -0
- package/classed.esm.js +1 -42
- package/createUseMediaQueryWidth.cjs.js +1 -15
- package/createUseMediaQueryWidth.d.ts +6 -0
- package/createUseMediaQueryWidth.esm.js +1 -15
- package/extendComponent.cjs.js +1 -5
- package/extendComponent.d.ts +11 -0
- package/extendComponent.esm.js +1 -5
- package/forms/antispam.cjs.js +1 -27
- package/forms/antispam.d.ts +22 -2
- package/forms/antispam.esm.js +1 -27
- package/package.json +3 -3
- package/useAsyncFn.cjs.js +1 -4
- package/useAsyncFn.d.ts +3 -0
- package/useAsyncFn.esm.js +1 -4
- package/useFirstMountState.cjs.js +1 -3
- package/useFirstMountState.d.ts +3 -0
- package/useFirstMountState.esm.js +1 -3
- package/useFixedOffset.cjs.js +1 -12
- package/useFixedOffset.d.ts +9 -0
- package/useFixedOffset.esm.js +1 -12
- package/useFocus.cjs.js +1 -3
- package/useFocus.d.ts +3 -0
- package/useFocus.esm.js +1 -3
- package/useInterval.cjs.js +1 -6
- package/useInterval.d.ts +5 -0
- package/useInterval.esm.js +1 -6
- package/useIsomorphicLayoutEffect.cjs.js +1 -3
- package/useIsomorphicLayoutEffect.d.ts +3 -0
- package/useIsomorphicLayoutEffect.esm.js +1 -3
- package/useKeyUp.cjs.js +1 -6
- package/useKeyUp.esm.js +1 -6
- package/useMeasure.cjs.js +1 -33
- package/useMeasure.d.ts +5 -0
- package/useMeasure.esm.js +1 -33
- package/useMountedState.cjs.js +1 -3
- package/useMountedState.d.ts +3 -0
- package/useMountedState.esm.js +1 -3
- package/useNavigateAway.cjs.js +1 -47
- package/useNavigateAway.d.ts +29 -0
- package/useNavigateAway.esm.js +1 -47
- package/usePrevious.d.ts +3 -0
- package/useReveal.d.ts +21 -0
- package/useScrollPosition.cjs.js +1 -7
- package/useScrollPosition.d.ts +7 -0
- package/useScrollPosition.esm.js +1 -7
- package/useScrollThreshold.cjs.js +1 -4
- package/useScrollThreshold.esm.js +1 -4
- package/useScrollTo.cjs.js +1 -3
- package/useScrollTo.esm.js +1 -3
- package/useSmoothScroll.cjs.js +1 -6
- package/useSmoothScroll.d.ts +6 -0
- package/useSmoothScroll.esm.js +1 -6
- package/useSpinDelay.cjs.js +1 -12
- package/useSpinDelay.d.ts +12 -0
- package/useSpinDelay.esm.js +1 -12
- package/useTraceUpdate.cjs.js +1 -4
- package/useTraceUpdate.d.ts +3 -0
- package/useTraceUpdate.esm.js +1 -4
- package/useUpdateEffect.cjs.js +1 -4
- package/useUpdateEffect.d.ts +3 -0
- package/useUpdateEffect.esm.js +1 -4
- package/useWindowSize.cjs.js +1 -9
- package/useWindowSize.d.ts +11 -2
- package/useWindowSize.esm.js +1 -9
package/calendar/utils.cjs.js
CHANGED
|
@@ -10,24 +10,7 @@ var startOfWeek = require('date-fns/startOfWeek');
|
|
|
10
10
|
var subMonths = require('date-fns/subMonths');
|
|
11
11
|
var subWeeks = require('date-fns/subWeeks');
|
|
12
12
|
|
|
13
|
-
let getEventTimestamp=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t.valueOf()/1e3};let getDisplayTime=e=>e.getHours()+":"+"0".repeat(2-e.getMinutes().toString().length)+e.getMinutes();let getStartDate=(e,t)=>(e.setHours(0,0,0),"month"===t?e.setDate(1):"week"===t&&(e=startOfWeek.startOfWeek(e,{weekStartsOn:1})),e);let getEndDate=(e,t)=>{let r=e;return "month"===t?r=endOfMonth.endOfMonth(e):"week"===t&&(r=endOfWeek.endOfWeek(e,{weekStartsOn:1})),r.setHours(23,59,59),r};let getPrevDate=(e,t)=>"month"===t?subMonths.subMonths(e,1):subWeeks.subWeeks(e,1);let getNextDate=(e,a)=>"month"===a?addMonths.addMonths(e,1):addWeeks.addWeeks(e,1);let isTodayInView=(e,t)=>isWithinInterval.isWithinInterval(new Date,{start:e,end:t});let addCalendarEvents=(e,t)=>{for(let r in e){let a=e[r];t[r]=a;}return t};let i=e=>{let t={};for(let r in e){let a=e[r];a.days.forEach(e=>{t[e]=t[e]||{},t[e][r]=a;});}return t},d=e=>{let t=[];for(let r in e)t.push(e[r]);return
|
|
14
|
-
t.sort((e,t)=>{let r=Number(t.multi)-Number(e.multi),a=Number(t.allDay)-Number(e.allDay),n=e.start.getTime()-t.start.getTime(),s=e.created.getTime()-t.created.getTime();return r||a||n||s}),t)};let processEventsInView=(t,r,a,n)=>{let s=i(t),o=d(t),l=new Date,m=getEventTimestamp(l),p={},f=[];for(let t=0;t<n.length;t++){let i={props:{key:`week.${t}`},days:[]},d=n[t],u=d.getDate(),g=getEventTimestamp(new Date(d)),h=getEventTimestamp(addDays.addDays(new Date(d),6));for(let e=0;e<7;e++){let t=new Date(new Date(d).setDate(u+e)),n=getEventTimestamp(t),f={$isToday:m===n,$isOutOfRange:"month"===r&&t.getMonth()!==a},v={props:{key:`day.${n}`,...f},timestamp:n+"",label:t.getDate()+"",events:[]};// check that we have events in this day
|
|
15
|
-
if(s?.[n]){let t=Object.keys(s[n]).map(()=>0);for(let r=0;r<o.length;r++){let a;let s=o[r],m=1,i=0;if(s.daysMap[n]){// if we already have the information on when the event has been
|
|
16
|
-
// vertically positioned use that index
|
|
17
|
-
if(// only for multi days events:
|
|
18
|
-
s.multi&&(// filter out the days outside of the current week view to avoid
|
|
19
|
-
// making a multi-days event chip wider than the week row or shorter
|
|
20
|
-
// than it should be (when event spans across weeks)
|
|
21
|
-
m=s.days.filter(e=>e>=g&&e<=h).length,// flag the first day of multi-days events, consider that an event
|
|
22
|
-
// might start in a day earlier (hence outside) of the current
|
|
23
|
-
// week/month view, so we always check for Mondays (dayNumber === 0)
|
|
24
|
-
(0===s.days.indexOf(n)||0===e)&&(a=!0)),p[s.uid])i=p[s.uid];else // now look for a free slot and use its index as `top`
|
|
25
|
-
for(let e=0;e<t.length;e++)if(1!==t[e]){i=e;break}// now mark the slot as busy
|
|
26
|
-
t[i]=1,// store the slot vertical position consistently for multi-days events
|
|
27
|
-
a&&(p[s.uid]=i),// push the event, they will be sorted later
|
|
28
|
-
v.events.push({key:`event.${n}-${i}`,...f,...s,isPast:l>s.end,firstOfMulti:a,top:i,width:m});}}// fill the empty slots with events' placeholders
|
|
29
|
-
for(let e=0;e<t.length;e++)1!==t[e]&&v.events.push({key:`event.${n}-${e}}`,placeholder:!0,top:e});// sort events and events placeholders by top position
|
|
30
|
-
v.events.sort((e,t)=>e.top-t.top);}i.days.push(v);}f.push(i);}return f};
|
|
13
|
+
let getEventTimestamp=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t.valueOf()/1e3};let getDisplayTime=e=>e.getHours()+":"+"0".repeat(2-e.getMinutes().toString().length)+e.getMinutes();let getStartDate=(e,t)=>(e.setHours(0,0,0),"month"===t?e.setDate(1):"week"===t&&(e=startOfWeek.startOfWeek(e,{weekStartsOn:1})),e);let getEndDate=(e,t)=>{let r=e;return "month"===t?r=endOfMonth.endOfMonth(e):"week"===t&&(r=endOfWeek.endOfWeek(e,{weekStartsOn:1})),r.setHours(23,59,59),r};let getPrevDate=(e,t)=>"month"===t?subMonths.subMonths(e,1):subWeeks.subWeeks(e,1);let getNextDate=(e,a)=>"month"===a?addMonths.addMonths(e,1):addWeeks.addWeeks(e,1);let isTodayInView=(e,t)=>isWithinInterval.isWithinInterval(new Date,{start:e,end:t});let addCalendarEvents=(e,t)=>{for(let r in e){let a=e[r];t[r]=a;}return t};let i=e=>{let t={};for(let r in e){let a=e[r];a.days.forEach(e=>{t[e]=t[e]||{},t[e][r]=a;});}return t},d=e=>{let t=[];for(let r in e)t.push(e[r]);return t.sort((e,t)=>{let r=Number(t.multi)-Number(e.multi),a=Number(t.allDay)-Number(e.allDay),n=e.start.getTime()-t.start.getTime(),s=e.created.getTime()-t.created.getTime();return r||a||n||s}),t};let processEventsInView=(t,r,a,n)=>{let s=i(t),o=d(t),l=new Date,m=getEventTimestamp(l),p={},f=[];for(let t=0;t<n.length;t++){let i={props:{key:`week.${t}`},days:[]},d=n[t],u=d.getDate(),g=getEventTimestamp(new Date(d)),h=getEventTimestamp(addDays.addDays(new Date(d),6));for(let e=0;e<7;e++){let t=new Date(new Date(d).setDate(u+e)),n=getEventTimestamp(t),f={$isToday:m===n,$isOutOfRange:"month"===r&&t.getMonth()!==a},v={props:{key:`day.${n}`,...f},timestamp:n+"",label:t.getDate()+"",events:[]};if(s?.[n]){let t=Object.keys(s[n]).map(()=>0);for(let r=0;r<o.length;r++){let a;let s=o[r],m=1,i=0;if(s.daysMap[n]){if(s.multi&&(m=s.days.filter(e=>e>=g&&e<=h).length,(0===s.days.indexOf(n)||0===e)&&(a=!0)),p[s.uid])i=p[s.uid];else for(let e=0;e<t.length;e++)if(1!==t[e]){i=e;break}t[i]=1,a&&(p[s.uid]=i),v.events.push({key:`event.${n}-${i}`,...f,...s,isPast:l>s.end,firstOfMulti:a,top:i,width:m});}}for(let e=0;e<t.length;e++)1!==t[e]&&v.events.push({key:`event.${n}-${e}}`,placeholder:!0,top:e});v.events.sort((e,t)=>e.top-t.top);}i.days.push(v);}f.push(i);}return f};
|
|
31
14
|
|
|
32
15
|
exports.addCalendarEvents = addCalendarEvents;
|
|
33
16
|
exports.getDisplayTime = getDisplayTime;
|
package/calendar/utils.esm.js
CHANGED
|
@@ -8,23 +8,6 @@ import { startOfWeek } from 'date-fns/startOfWeek';
|
|
|
8
8
|
import { subMonths } from 'date-fns/subMonths';
|
|
9
9
|
import { subWeeks } from 'date-fns/subWeeks';
|
|
10
10
|
|
|
11
|
-
let getEventTimestamp=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t.valueOf()/1e3};let getDisplayTime=e=>e.getHours()+":"+"0".repeat(2-e.getMinutes().toString().length)+e.getMinutes();let getStartDate=(e,t)=>(e.setHours(0,0,0),"month"===t?e.setDate(1):"week"===t&&(e=startOfWeek(e,{weekStartsOn:1})),e);let getEndDate=(e,t)=>{let r=e;return "month"===t?r=endOfMonth(e):"week"===t&&(r=endOfWeek(e,{weekStartsOn:1})),r.setHours(23,59,59),r};let getPrevDate=(e,t)=>"month"===t?subMonths(e,1):subWeeks(e,1);let getNextDate=(e,a)=>"month"===a?addMonths(e,1):addWeeks(e,1);let isTodayInView=(e,t)=>isWithinInterval(new Date,{start:e,end:t});let addCalendarEvents=(e,t)=>{for(let r in e){let a=e[r];t[r]=a;}return t};let i=e=>{let t={};for(let r in e){let a=e[r];a.days.forEach(e=>{t[e]=t[e]||{},t[e][r]=a;});}return t},d=e=>{let t=[];for(let r in e)t.push(e[r]);return
|
|
12
|
-
t.sort((e,t)=>{let r=Number(t.multi)-Number(e.multi),a=Number(t.allDay)-Number(e.allDay),n=e.start.getTime()-t.start.getTime(),s=e.created.getTime()-t.created.getTime();return r||a||n||s}),t)};let processEventsInView=(t,r,a,n)=>{let s=i(t),o=d(t),l=new Date,m=getEventTimestamp(l),p={},f=[];for(let t=0;t<n.length;t++){let i={props:{key:`week.${t}`},days:[]},d=n[t],u=d.getDate(),g=getEventTimestamp(new Date(d)),h=getEventTimestamp(addDays(new Date(d),6));for(let e=0;e<7;e++){let t=new Date(new Date(d).setDate(u+e)),n=getEventTimestamp(t),f={$isToday:m===n,$isOutOfRange:"month"===r&&t.getMonth()!==a},v={props:{key:`day.${n}`,...f},timestamp:n+"",label:t.getDate()+"",events:[]};// check that we have events in this day
|
|
13
|
-
if(s?.[n]){let t=Object.keys(s[n]).map(()=>0);for(let r=0;r<o.length;r++){let a;let s=o[r],m=1,i=0;if(s.daysMap[n]){// if we already have the information on when the event has been
|
|
14
|
-
// vertically positioned use that index
|
|
15
|
-
if(// only for multi days events:
|
|
16
|
-
s.multi&&(// filter out the days outside of the current week view to avoid
|
|
17
|
-
// making a multi-days event chip wider than the week row or shorter
|
|
18
|
-
// than it should be (when event spans across weeks)
|
|
19
|
-
m=s.days.filter(e=>e>=g&&e<=h).length,// flag the first day of multi-days events, consider that an event
|
|
20
|
-
// might start in a day earlier (hence outside) of the current
|
|
21
|
-
// week/month view, so we always check for Mondays (dayNumber === 0)
|
|
22
|
-
(0===s.days.indexOf(n)||0===e)&&(a=!0)),p[s.uid])i=p[s.uid];else // now look for a free slot and use its index as `top`
|
|
23
|
-
for(let e=0;e<t.length;e++)if(1!==t[e]){i=e;break}// now mark the slot as busy
|
|
24
|
-
t[i]=1,// store the slot vertical position consistently for multi-days events
|
|
25
|
-
a&&(p[s.uid]=i),// push the event, they will be sorted later
|
|
26
|
-
v.events.push({key:`event.${n}-${i}`,...f,...s,isPast:l>s.end,firstOfMulti:a,top:i,width:m});}}// fill the empty slots with events' placeholders
|
|
27
|
-
for(let e=0;e<t.length;e++)1!==t[e]&&v.events.push({key:`event.${n}-${e}}`,placeholder:!0,top:e});// sort events and events placeholders by top position
|
|
28
|
-
v.events.sort((e,t)=>e.top-t.top);}i.days.push(v);}f.push(i);}return f};
|
|
11
|
+
let getEventTimestamp=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t.valueOf()/1e3};let getDisplayTime=e=>e.getHours()+":"+"0".repeat(2-e.getMinutes().toString().length)+e.getMinutes();let getStartDate=(e,t)=>(e.setHours(0,0,0),"month"===t?e.setDate(1):"week"===t&&(e=startOfWeek(e,{weekStartsOn:1})),e);let getEndDate=(e,t)=>{let r=e;return "month"===t?r=endOfMonth(e):"week"===t&&(r=endOfWeek(e,{weekStartsOn:1})),r.setHours(23,59,59),r};let getPrevDate=(e,t)=>"month"===t?subMonths(e,1):subWeeks(e,1);let getNextDate=(e,a)=>"month"===a?addMonths(e,1):addWeeks(e,1);let isTodayInView=(e,t)=>isWithinInterval(new Date,{start:e,end:t});let addCalendarEvents=(e,t)=>{for(let r in e){let a=e[r];t[r]=a;}return t};let i=e=>{let t={};for(let r in e){let a=e[r];a.days.forEach(e=>{t[e]=t[e]||{},t[e][r]=a;});}return t},d=e=>{let t=[];for(let r in e)t.push(e[r]);return t.sort((e,t)=>{let r=Number(t.multi)-Number(e.multi),a=Number(t.allDay)-Number(e.allDay),n=e.start.getTime()-t.start.getTime(),s=e.created.getTime()-t.created.getTime();return r||a||n||s}),t};let processEventsInView=(t,r,a,n)=>{let s=i(t),o=d(t),l=new Date,m=getEventTimestamp(l),p={},f=[];for(let t=0;t<n.length;t++){let i={props:{key:`week.${t}`},days:[]},d=n[t],u=d.getDate(),g=getEventTimestamp(new Date(d)),h=getEventTimestamp(addDays(new Date(d),6));for(let e=0;e<7;e++){let t=new Date(new Date(d).setDate(u+e)),n=getEventTimestamp(t),f={$isToday:m===n,$isOutOfRange:"month"===r&&t.getMonth()!==a},v={props:{key:`day.${n}`,...f},timestamp:n+"",label:t.getDate()+"",events:[]};if(s?.[n]){let t=Object.keys(s[n]).map(()=>0);for(let r=0;r<o.length;r++){let a;let s=o[r],m=1,i=0;if(s.daysMap[n]){if(s.multi&&(m=s.days.filter(e=>e>=g&&e<=h).length,(0===s.days.indexOf(n)||0===e)&&(a=!0)),p[s.uid])i=p[s.uid];else for(let e=0;e<t.length;e++)if(1!==t[e]){i=e;break}t[i]=1,a&&(p[s.uid]=i),v.events.push({key:`event.${n}-${i}`,...f,...s,isPast:l>s.end,firstOfMulti:a,top:i,width:m});}}for(let e=0;e<t.length;e++)1!==t[e]&&v.events.push({key:`event.${n}-${e}}`,placeholder:!0,top:e});v.events.sort((e,t)=>e.top-t.top);}i.days.push(v);}f.push(i);}return f};
|
|
29
12
|
|
|
30
13
|
export { addCalendarEvents, getDisplayTime, getEndDate, getEventTimestamp, getNextDate, getPrevDate, getStartDate, isTodayInView, processEventsInView };
|
package/classed.cjs.js
CHANGED
|
@@ -4,48 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
// ? @see https://react-typescript-cheatsheet.netlify.app/docs/advanced/patterns_by_usecase/#props-extracting-prop-types-of-a-component
|
|
9
|
-
// type ClassedComponent<Props = {}> =
|
|
10
|
-
// | React.ElementType<Props>
|
|
11
|
-
// | OverridableComponent<any>
|
|
12
|
-
// | React.Component<Props>
|
|
13
|
-
// | React.FunctionComponent<Props>
|
|
14
|
-
// | React.ReactElement<Props>
|
|
15
|
-
// | React.ReactHTMLElement<any>
|
|
16
|
-
// | string // | JSX.IntrinsicElements
|
|
17
|
-
// | ((props: Props) => JSX.Element);
|
|
18
|
-
/**
|
|
19
|
-
* This utility allows to extend a component a là `styled-components` but for
|
|
20
|
-
* a className based styling solution like Tailwind,
|
|
21
|
-
*
|
|
22
|
-
* It also plays nicely with tailwind intellisense:
|
|
23
|
-
* - https://github.com/tailwindlabs/tailwindcss-intellisense#tailwindcssclassattributes
|
|
24
|
-
*
|
|
25
|
-
* For references about tagged functions:
|
|
26
|
-
* - https://javascript.plainenglish.io/how-css-in-js-libraries-work-da4145b1b6c7
|
|
27
|
-
* - https://makersden.io/blog/reverse-engineering-styled-components
|
|
28
|
-
* - https://typesafe.blog/article/the-logic-behind-javascript-tag-functions
|
|
29
|
-
* - https://flaming.codes/posts/typescript-and-javascript-tagged-template-strings
|
|
30
|
-
*
|
|
31
|
-
* Similar projects:
|
|
32
|
-
* - https://reactjsexample.com/style-radix-ui-components-with-tailwindcss/
|
|
33
|
-
*
|
|
34
|
-
* Discussions and Q/A:
|
|
35
|
-
* - https://stackoverflow.com/q/73055695/1938970
|
|
36
|
-
*/let classed=r=>{// @ts-expect-error nevermind for now...
|
|
37
|
-
let s=r.type||r;return function(r,...a){// FIXME: not sure if this is needed
|
|
38
|
-
// WrappedComponent.displayName = type.toString();
|
|
39
|
-
return /*#__PURE__*/react.forwardRef(// Props
|
|
40
|
-
function(e,n){let o=a.map((t,s)=>{let a="";return "function"==typeof t?a=t(e):void 0!==t&&(a=t.toString()),r[s]+a}).join(""),l="string"==typeof s,i=l?{}:e;if(l)for(let t in e)// like styled-components `transient` props
|
|
41
|
-
t.startsWith("$")||// FIXME: for react 18 we need: @ts-expect-error
|
|
42
|
-
(i[t]=e[t]);// get the tagged function string outcome
|
|
43
|
-
let c=o||r[0];return(// add the custom classes from props
|
|
44
|
-
c=// check if we need to clean it or not from the optional structure `< class="..."`
|
|
45
|
-
(c.match(/class="([^"]*)/)?.[1]||c)+(e?.className?" "+e?.className:""),/*#__PURE__*/react.createElement(s,{// ...props,
|
|
46
|
-
...i,// only add ot props if it is not an empty string
|
|
47
|
-
className:c||void 0,// add ref to props
|
|
48
|
-
ref:n}))})}};// as unknown as React.ReactElement<typeof props>;
|
|
7
|
+
let classed=r=>{let s=r.type||r;return function(r,...a){return react.forwardRef(function(e,n){let o=a.map((t,s)=>{let a="";return "function"==typeof t?a=t(e):void 0!==t&&(a=t.toString()),r[s]+a}).join(""),l="string"==typeof s,i=l?{}:e;if(l)for(let t in e)t.startsWith("$")||(i[t]=e[t]);let c=o||r[0];return c=(c.match(/class="([^"]*)/)?.[1]||c)+(e?.className?" "+e?.className:""),react.createElement(s,{...i,className:c||void 0,ref:n})})}};
|
|
49
8
|
|
|
50
9
|
exports.classed = classed;
|
|
51
10
|
exports.default = classed;
|
package/classed.d.ts
CHANGED
|
@@ -4,5 +4,24 @@ type ClassedAugmentedProps<Props> = Props & {
|
|
|
4
4
|
ref?: React.Ref<any>;
|
|
5
5
|
};
|
|
6
6
|
type ClassedFinalProps<Props, Component> = Component extends React.ReactHTML ? React.HTMLProps<Component> & ClassedAugmentedProps<Props> : ClassedAugmentedProps<Props>;
|
|
7
|
+
/**
|
|
8
|
+
* This utility allows to extend a component a là `styled-components` but for
|
|
9
|
+
* a className based styling solution like Tailwind,
|
|
10
|
+
*
|
|
11
|
+
* It also plays nicely with tailwind intellisense:
|
|
12
|
+
* - https://github.com/tailwindlabs/tailwindcss-intellisense#tailwindcssclassattributes
|
|
13
|
+
*
|
|
14
|
+
* For references about tagged functions:
|
|
15
|
+
* - https://javascript.plainenglish.io/how-css-in-js-libraries-work-da4145b1b6c7
|
|
16
|
+
* - https://makersden.io/blog/reverse-engineering-styled-components
|
|
17
|
+
* - https://typesafe.blog/article/the-logic-behind-javascript-tag-functions
|
|
18
|
+
* - https://flaming.codes/posts/typescript-and-javascript-tagged-template-strings
|
|
19
|
+
*
|
|
20
|
+
* Similar projects:
|
|
21
|
+
* - https://reactjsexample.com/style-radix-ui-components-with-tailwindcss/
|
|
22
|
+
*
|
|
23
|
+
* Discussions and Q/A:
|
|
24
|
+
* - https://stackoverflow.com/q/73055695/1938970
|
|
25
|
+
*/
|
|
7
26
|
export declare let classed: <Props, Component extends React.ElementType = any>(component: Component) => (strings: TemplateStringsArray, ...args: ((props: Props) => string)[] | string[]) => React.ForwardRefExoticComponent<React.PropsWithoutRef<ClassedFinalProps<Props, Component>> & React.RefAttributes<Component>>;
|
|
8
27
|
export default classed;
|
package/classed.esm.js
CHANGED
|
@@ -1,46 +1,5 @@
|
|
|
1
1
|
import { forwardRef, createElement } from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
// ? @see https://react-typescript-cheatsheet.netlify.app/docs/advanced/patterns_by_usecase/#props-extracting-prop-types-of-a-component
|
|
5
|
-
// type ClassedComponent<Props = {}> =
|
|
6
|
-
// | React.ElementType<Props>
|
|
7
|
-
// | OverridableComponent<any>
|
|
8
|
-
// | React.Component<Props>
|
|
9
|
-
// | React.FunctionComponent<Props>
|
|
10
|
-
// | React.ReactElement<Props>
|
|
11
|
-
// | React.ReactHTMLElement<any>
|
|
12
|
-
// | string // | JSX.IntrinsicElements
|
|
13
|
-
// | ((props: Props) => JSX.Element);
|
|
14
|
-
/**
|
|
15
|
-
* This utility allows to extend a component a là `styled-components` but for
|
|
16
|
-
* a className based styling solution like Tailwind,
|
|
17
|
-
*
|
|
18
|
-
* It also plays nicely with tailwind intellisense:
|
|
19
|
-
* - https://github.com/tailwindlabs/tailwindcss-intellisense#tailwindcssclassattributes
|
|
20
|
-
*
|
|
21
|
-
* For references about tagged functions:
|
|
22
|
-
* - https://javascript.plainenglish.io/how-css-in-js-libraries-work-da4145b1b6c7
|
|
23
|
-
* - https://makersden.io/blog/reverse-engineering-styled-components
|
|
24
|
-
* - https://typesafe.blog/article/the-logic-behind-javascript-tag-functions
|
|
25
|
-
* - https://flaming.codes/posts/typescript-and-javascript-tagged-template-strings
|
|
26
|
-
*
|
|
27
|
-
* Similar projects:
|
|
28
|
-
* - https://reactjsexample.com/style-radix-ui-components-with-tailwindcss/
|
|
29
|
-
*
|
|
30
|
-
* Discussions and Q/A:
|
|
31
|
-
* - https://stackoverflow.com/q/73055695/1938970
|
|
32
|
-
*/let classed=r=>{// @ts-expect-error nevermind for now...
|
|
33
|
-
let s=r.type||r;return function(r,...a){// FIXME: not sure if this is needed
|
|
34
|
-
// WrappedComponent.displayName = type.toString();
|
|
35
|
-
return /*#__PURE__*/forwardRef(// Props
|
|
36
|
-
function(e,n){let o=a.map((t,s)=>{let a="";return "function"==typeof t?a=t(e):void 0!==t&&(a=t.toString()),r[s]+a}).join(""),l="string"==typeof s,i=l?{}:e;if(l)for(let t in e)// like styled-components `transient` props
|
|
37
|
-
t.startsWith("$")||// FIXME: for react 18 we need: @ts-expect-error
|
|
38
|
-
(i[t]=e[t]);// get the tagged function string outcome
|
|
39
|
-
let c=o||r[0];return(// add the custom classes from props
|
|
40
|
-
c=// check if we need to clean it or not from the optional structure `< class="..."`
|
|
41
|
-
(c.match(/class="([^"]*)/)?.[1]||c)+(e?.className?" "+e?.className:""),/*#__PURE__*/createElement(s,{// ...props,
|
|
42
|
-
...i,// only add ot props if it is not an empty string
|
|
43
|
-
className:c||void 0,// add ref to props
|
|
44
|
-
ref:n}))})}};// as unknown as React.ReactElement<typeof props>;
|
|
3
|
+
let classed=r=>{let s=r.type||r;return function(r,...a){return forwardRef(function(e,n){let o=a.map((t,s)=>{let a="";return "function"==typeof t?a=t(e):void 0!==t&&(a=t.toString()),r[s]+a}).join(""),l="string"==typeof s,i=l?{}:e;if(l)for(let t in e)t.startsWith("$")||(i[t]=e[t]);let c=o||r[0];return c=(c.match(/class="([^"]*)/)?.[1]||c)+(e?.className?" "+e?.className:""),createElement(s,{...i,className:c||void 0,ref:n})})}};
|
|
45
4
|
|
|
46
5
|
export { classed, classed as default };
|
|
@@ -6,21 +6,7 @@ var react = require('react');
|
|
|
6
6
|
var utils = require('@koine/utils');
|
|
7
7
|
var useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.cjs.js');
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
* Use `null` instead of `false` as default value, @see https://observablehq.com/@werehamster/avoiding-hydration-mismatch-when-using-react-hooks
|
|
11
|
-
*
|
|
12
|
-
* @param customBreakpoints
|
|
13
|
-
* @returns
|
|
14
|
-
*/let createUseMediaQueryWidth=n=>{let a=utils.getMediaQueryWidthResolvers(n);return function(t,n){let[o,s]=t.substring(1).split("-");utils.isUndefined(s)&&(s=o),utils.isUndefined(o)&&(o="min");// with the hook creator approach these breakpoint types cannot be deduced
|
|
15
|
-
// const [br1, br2] = ruleBreakpoint.split("-") as Split<
|
|
16
|
-
// typeof ruleBreakpoint,
|
|
17
|
-
// "-"
|
|
18
|
-
// >;
|
|
19
|
-
let[d,m]=s.split("_"),u=a[o](d,m),[c,l]=react.useState(utils.isUndefined(n)?null:n);return useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(()=>{let e=window.matchMedia(u),t=e=>{l(e.matches);};return(// Safari < 14 can't use addEventListener on a MediaQueryList
|
|
20
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList#Browser_compatibility
|
|
21
|
-
(l(e.matches),e.addEventListener)?(e.addEventListener("change",t),()=>{e.removeEventListener("change",t);}):(// Update the state whenever the media query match state changes
|
|
22
|
-
e.addListener(t),// Clean up on unmount and if the query changes
|
|
23
|
-
()=>{e.removeListener(t);}))},[u]),c}};//// without creator it would be:
|
|
9
|
+
let createUseMediaQueryWidth=n=>{let a=utils.getMediaQueryWidthResolvers(n);return function(t,n){let[o,s]=t.substring(1).split("-");utils.isUndefined(s)&&(s=o),utils.isUndefined(o)&&(o="min");let[d,m]=s.split("_"),u=a[o](d,m),[c,l]=react.useState(utils.isUndefined(n)?null:n);return useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(()=>{let e=window.matchMedia(u),t=e=>{l(e.matches);};return (l(e.matches),e.addEventListener)?(e.addEventListener("change",t),()=>{e.removeEventListener("change",t);}):(e.addListener(t),()=>{e.removeListener(t);})},[u]),c}};
|
|
24
10
|
|
|
25
11
|
exports.createUseMediaQueryWidth = createUseMediaQueryWidth;
|
|
26
12
|
exports.default = createUseMediaQueryWidth;
|
|
@@ -2,5 +2,11 @@ import { type GetMediaQueryWidthResolversBreakpoints } from "@koine/utils";
|
|
|
2
2
|
type _MediaQuerWidthDefExplicit<TBreakpoint extends string> = `min-${TBreakpoint}` | `max-${TBreakpoint}` | `up-${TBreakpoint}` | `down-${TBreakpoint}` | `between-${TBreakpoint}_${TBreakpoint}` | `only-${TBreakpoint}`;
|
|
3
3
|
export type MediaQuerWidthDef<TBreakpoint extends string> = `${TBreakpoint}` | _MediaQuerWidthDefExplicit<TBreakpoint>;
|
|
4
4
|
export type MediaQueryWidth<TBreakpoint extends string> = `@${MediaQuerWidthDef<TBreakpoint>}`;
|
|
5
|
+
/**
|
|
6
|
+
* Use `null` instead of `false` as default value, @see https://observablehq.com/@werehamster/avoiding-hydration-mismatch-when-using-react-hooks
|
|
7
|
+
*
|
|
8
|
+
* @param customBreakpoints
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
5
11
|
export declare let createUseMediaQueryWidth: <TBreakpointsConfig extends GetMediaQueryWidthResolversBreakpoints>(customBreakpoints: TBreakpointsConfig) => <TBreakpoints extends Extract<keyof TBreakpointsConfig, string>>(media: MediaQueryWidth<TBreakpoints>, serverValue?: null | boolean) => boolean | null;
|
|
6
12
|
export default createUseMediaQueryWidth;
|
|
@@ -2,20 +2,6 @@ import { useState } from 'react';
|
|
|
2
2
|
import { getMediaQueryWidthResolvers, isUndefined } from '@koine/utils';
|
|
3
3
|
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.esm.js';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
* Use `null` instead of `false` as default value, @see https://observablehq.com/@werehamster/avoiding-hydration-mismatch-when-using-react-hooks
|
|
7
|
-
*
|
|
8
|
-
* @param customBreakpoints
|
|
9
|
-
* @returns
|
|
10
|
-
*/let createUseMediaQueryWidth=n=>{let a=getMediaQueryWidthResolvers(n);return function(t,n){let[o,s]=t.substring(1).split("-");isUndefined(s)&&(s=o),isUndefined(o)&&(o="min");// with the hook creator approach these breakpoint types cannot be deduced
|
|
11
|
-
// const [br1, br2] = ruleBreakpoint.split("-") as Split<
|
|
12
|
-
// typeof ruleBreakpoint,
|
|
13
|
-
// "-"
|
|
14
|
-
// >;
|
|
15
|
-
let[d,m]=s.split("_"),u=a[o](d,m),[c,l]=useState(isUndefined(n)?null:n);return useIsomorphicLayoutEffect(()=>{let e=window.matchMedia(u),t=e=>{l(e.matches);};return(// Safari < 14 can't use addEventListener on a MediaQueryList
|
|
16
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList#Browser_compatibility
|
|
17
|
-
(l(e.matches),e.addEventListener)?(e.addEventListener("change",t),()=>{e.removeEventListener("change",t);}):(// Update the state whenever the media query match state changes
|
|
18
|
-
e.addListener(t),// Clean up on unmount and if the query changes
|
|
19
|
-
()=>{e.removeListener(t);}))},[u]),c}};//// without creator it would be:
|
|
5
|
+
let createUseMediaQueryWidth=n=>{let a=getMediaQueryWidthResolvers(n);return function(t,n){let[o,s]=t.substring(1).split("-");isUndefined(s)&&(s=o),isUndefined(o)&&(o="min");let[d,m]=s.split("_"),u=a[o](d,m),[c,l]=useState(isUndefined(n)?null:n);return useIsomorphicLayoutEffect(()=>{let e=window.matchMedia(u),t=e=>{l(e.matches);};return (l(e.matches),e.addEventListener)?(e.addEventListener("change",t),()=>{e.removeEventListener("change",t);}):(e.addListener(t),()=>{e.removeListener(t);})},[u]),c}};
|
|
20
6
|
|
|
21
7
|
export { createUseMediaQueryWidth, createUseMediaQueryWidth as default };
|
package/extendComponent.cjs.js
CHANGED
|
@@ -4,11 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
|
|
7
|
-
let extendComponent=(t,o)
|
|
8
|
-
// (props, ref) => createElement(component, { ...props, ref })
|
|
9
|
-
// );
|
|
10
|
-
Object.assign(// FIXME: check if we need to forwardRef or not
|
|
11
|
-
o=>react.createElement(t,o),{...o,defaultProps:o});
|
|
7
|
+
let extendComponent=(t,o)=>Object.assign(o=>react.createElement(t,o),{...o,defaultProps:o});
|
|
12
8
|
|
|
13
9
|
exports.default = extendComponent;
|
|
14
10
|
exports.extendComponent = extendComponent;
|
package/extendComponent.d.ts
CHANGED
|
@@ -9,6 +9,17 @@ export interface OverridableComponents {
|
|
|
9
9
|
motionable?: boolean;
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Type to define a component that has overridable components.
|
|
14
|
+
*
|
|
15
|
+
* Each of them can define its:
|
|
16
|
+
* - `type`: either as a native HTMLElement (the props for that element will be
|
|
17
|
+
* automatically inferred) or as a custom React component
|
|
18
|
+
* - `props`: any additional custom props
|
|
19
|
+
* - `motionable`: if that component has a possible implementation with `framer-motion`,
|
|
20
|
+
* in that case we remove some HTMLAttributes props which collides with
|
|
21
|
+
* `MotionProps` from framer.
|
|
22
|
+
*/
|
|
12
23
|
export type WithComponents<Props, Components extends OverridableComponents> = Props & {
|
|
13
24
|
[Name in keyof Components]: NonNullable<Components[Name]["type"] extends keyof JSX.IntrinsicElements ? React.ElementType<Components[Name]["motionable"] extends true ? Omit<React.ComponentPropsWithoutRef<Components[Name]["type"]>, HtmlAttributesCollidingWithMotionProps> & Components[Name]["props"] : React.ComponentPropsWithoutRef<Components[Name]["type"]> & Components[Name]["props"]> : Components[Name]["type"]>;
|
|
14
25
|
};
|
package/extendComponent.esm.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { createElement } from 'react';
|
|
2
2
|
|
|
3
|
-
let extendComponent=(t,o)
|
|
4
|
-
// (props, ref) => createElement(component, { ...props, ref })
|
|
5
|
-
// );
|
|
6
|
-
Object.assign(// FIXME: check if we need to forwardRef or not
|
|
7
|
-
o=>createElement(t,o),{...o,defaultProps:o});
|
|
3
|
+
let extendComponent=(t,o)=>Object.assign(o=>createElement(t,o),{...o,defaultProps:o});
|
|
8
4
|
|
|
9
5
|
export { extendComponent as default, extendComponent };
|
package/forms/antispam.cjs.js
CHANGED
|
@@ -3,33 +3,7 @@
|
|
|
3
3
|
var yup = require('@kuus/yup');
|
|
4
4
|
var utils = require('@koine/utils');
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
* Encode form
|
|
8
|
-
*
|
|
9
|
-
* Takes a record of yup validations and outputs a `yup` schema with encoded
|
|
10
|
-
* names (antispam technique) and a record of the encoded/decoded input `name`s.
|
|
11
|
-
*
|
|
12
|
-
* We skip the names prefixed wth an underscore which are considered programmatic
|
|
13
|
-
* form data not created by user input.
|
|
14
|
-
*
|
|
15
|
-
* FIXME: types https://github.com/jquense/yup/issues/1700
|
|
16
|
-
*/let encodeForm=t=>{let o={},i={};for(let e in t)if(!e.startsWith("_")){let l=utils.encode(e);o[l]=t[e],i[e]=l;}return {encodedSchema:// we need `.required()` to correctly infer the type @see
|
|
17
|
-
// https://github.com/jquense/yup/issues/946
|
|
18
|
-
yup.object(o).required(),encodedNames:i}};/**
|
|
19
|
-
* Decode form data
|
|
20
|
-
*
|
|
21
|
-
* This function is meant to be used inside an api endpoint to gather an encoded
|
|
22
|
-
* form submit data and transform it to the decoded desired json data.
|
|
23
|
-
*
|
|
24
|
-
* Here too we skip encoding/decoding process for names prefixed wth an underscore
|
|
25
|
-
* which are considered programmatic form data not created by user input.
|
|
26
|
-
*/let decodeForm=e=>{let r={};for(let i in e){let l=utils.decode(i);// always add underscore prefixed names as they are treated as internal
|
|
27
|
-
// private inputs outside of the honeypot system, normalise them here removing
|
|
28
|
-
// the underscore prefix
|
|
29
|
-
i.startsWith("_")?// @ts-expect-error nevermind
|
|
30
|
-
r[i.substring(1)]=e[i]:utils.isUndefined(e[i])||""!==e[l]||// @ts-expect-error nevermind
|
|
31
|
-
(r[l]=e[i]);}// console.log(formData, decoded, json);
|
|
32
|
-
return r};
|
|
6
|
+
let encodeForm=t=>{let o={},i={};for(let e in t)if(!e.startsWith("_")){let l=utils.encode(e);o[l]=t[e],i[e]=l;}return {encodedSchema:yup.object(o).required(),encodedNames:i}};let decodeForm=e=>{let r={};for(let i in e){let l=utils.decode(i);i.startsWith("_")?r[i.substring(1)]=e[i]:utils.isUndefined(e[i])||""!==e[l]||(r[l]=e[i]);}return r};
|
|
33
7
|
|
|
34
8
|
exports.decodeForm = decodeForm;
|
|
35
9
|
exports.encodeForm = encodeForm;
|
package/forms/antispam.d.ts
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { type ObjectShape } from "@kuus/yup";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Encode form
|
|
4
|
+
*
|
|
5
|
+
* Takes a record of yup validations and outputs a `yup` schema with encoded
|
|
6
|
+
* names (antispam technique) and a record of the encoded/decoded input `name`s.
|
|
7
|
+
*
|
|
8
|
+
* We skip the names prefixed wth an underscore which are considered programmatic
|
|
9
|
+
* form data not created by user input.
|
|
10
|
+
*
|
|
11
|
+
* FIXME: types https://github.com/jquense/yup/issues/1700
|
|
12
|
+
*/
|
|
13
|
+
export declare let encodeForm: <T extends ObjectShape = ObjectShape>(validationRules: T) => {
|
|
3
14
|
encodedSchema: import("@kuus/yup").ObjectSchema<{
|
|
4
15
|
[x: string]: T[keyof T] extends import("@kuus/yup").ISchema<any, any, any, any> ? T[keyof T]["__outputType"] : T[keyof T] extends {
|
|
5
16
|
readonly key: string;
|
|
@@ -24,4 +35,13 @@ export declare let encodeForm: <T extends ObjectShape = {}>(validationRules: T)
|
|
|
24
35
|
}, "">;
|
|
25
36
|
encodedNames: Record<keyof T, string>;
|
|
26
37
|
};
|
|
27
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Decode form data
|
|
40
|
+
*
|
|
41
|
+
* This function is meant to be used inside an api endpoint to gather an encoded
|
|
42
|
+
* form submit data and transform it to the decoded desired json data.
|
|
43
|
+
*
|
|
44
|
+
* Here too we skip encoding/decoding process for names prefixed wth an underscore
|
|
45
|
+
* which are considered programmatic form data not created by user input.
|
|
46
|
+
*/
|
|
47
|
+
export declare let decodeForm: <ReturnAs extends Record<string, unknown> = Record<string, unknown>, FormData extends Record<string, unknown> = Record<string, unknown>>(formData: FormData) => ReturnAs;
|
package/forms/antispam.esm.js
CHANGED
|
@@ -1,32 +1,6 @@
|
|
|
1
1
|
import { object } from '@kuus/yup';
|
|
2
2
|
import { encode, decode, isUndefined } from '@koine/utils';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
* Encode form
|
|
6
|
-
*
|
|
7
|
-
* Takes a record of yup validations and outputs a `yup` schema with encoded
|
|
8
|
-
* names (antispam technique) and a record of the encoded/decoded input `name`s.
|
|
9
|
-
*
|
|
10
|
-
* We skip the names prefixed wth an underscore which are considered programmatic
|
|
11
|
-
* form data not created by user input.
|
|
12
|
-
*
|
|
13
|
-
* FIXME: types https://github.com/jquense/yup/issues/1700
|
|
14
|
-
*/let encodeForm=t=>{let o={},i={};for(let e in t)if(!e.startsWith("_")){let l=encode(e);o[l]=t[e],i[e]=l;}return {encodedSchema:// we need `.required()` to correctly infer the type @see
|
|
15
|
-
// https://github.com/jquense/yup/issues/946
|
|
16
|
-
object(o).required(),encodedNames:i}};/**
|
|
17
|
-
* Decode form data
|
|
18
|
-
*
|
|
19
|
-
* This function is meant to be used inside an api endpoint to gather an encoded
|
|
20
|
-
* form submit data and transform it to the decoded desired json data.
|
|
21
|
-
*
|
|
22
|
-
* Here too we skip encoding/decoding process for names prefixed wth an underscore
|
|
23
|
-
* which are considered programmatic form data not created by user input.
|
|
24
|
-
*/let decodeForm=e=>{let r={};for(let i in e){let l=decode(i);// always add underscore prefixed names as they are treated as internal
|
|
25
|
-
// private inputs outside of the honeypot system, normalise them here removing
|
|
26
|
-
// the underscore prefix
|
|
27
|
-
i.startsWith("_")?// @ts-expect-error nevermind
|
|
28
|
-
r[i.substring(1)]=e[i]:isUndefined(e[i])||""!==e[l]||// @ts-expect-error nevermind
|
|
29
|
-
(r[l]=e[i]);}// console.log(formData, decoded, json);
|
|
30
|
-
return r};
|
|
4
|
+
let encodeForm=t=>{let o={},i={};for(let e in t)if(!e.startsWith("_")){let l=encode(e);o[l]=t[e],i[e]=l;}return {encodedSchema:object(o).required(),encodedNames:i}};let decodeForm=e=>{let r={};for(let i in e){let l=decode(i);i.startsWith("_")?r[i.substring(1)]=e[i]:isUndefined(e[i])||""!==e[l]||(r[l]=e[i]);}return r};
|
|
31
5
|
|
|
32
6
|
export { decodeForm, encodeForm };
|
package/package.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"name": "@koine/react",
|
|
3
3
|
"sideEffects": false,
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@koine/dom": "2.0.0-beta.
|
|
6
|
-
"@koine/utils": "2.0.0-beta.
|
|
5
|
+
"@koine/dom": "2.0.0-beta.134",
|
|
6
|
+
"@koine/utils": "2.0.0-beta.134"
|
|
7
7
|
},
|
|
8
8
|
"peerDependencies": {
|
|
9
9
|
"@kuus/yup": "1.0.0-beta.7",
|
|
@@ -223,5 +223,5 @@
|
|
|
223
223
|
"module": "./index.esm.js",
|
|
224
224
|
"main": "./index.cjs.js",
|
|
225
225
|
"types": "./index.esm.d.ts",
|
|
226
|
-
"version": "2.0.0-beta.
|
|
226
|
+
"version": "2.0.0-beta.134"
|
|
227
227
|
}
|
package/useAsyncFn.cjs.js
CHANGED
|
@@ -5,10 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var useMountedState = require('./useMountedState.cjs.js');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
* @borrows [streamich/react-use](https://github.com/streamich/react-use/blob/master/src/useAsyncFn.ts)
|
|
10
|
-
*/let useAsyncFn=(o,u=[],l={loading:!1})=>{let a=react.useRef(0),d=useMountedState.useMountedState(),[i,c]=react.useState(l),g=react.useCallback((...e)=>{let t=++a.current;return i.loading||c(e=>({...e,loading:!0})),o(...e).then(e=>(d()&&t===a.current&&c({value:e,loading:!1}),e),e=>(d()&&t===a.current&&c({error:e,loading:!1}),e))},// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
11
|
-
u);return [i,g]};
|
|
8
|
+
let useAsyncFn=(o,u=[],l={loading:!1})=>{let a=react.useRef(0),d=useMountedState.useMountedState(),[i,c]=react.useState(l),g=react.useCallback((...e)=>{let t=++a.current;return i.loading||c(e=>({...e,loading:!0})),o(...e).then(e=>(d()&&t===a.current&&c({value:e,loading:!1}),e),e=>(d()&&t===a.current&&c({error:e,loading:!1}),e))},u);return [i,g]};
|
|
12
9
|
|
|
13
10
|
exports.default = useAsyncFn;
|
|
14
11
|
exports.useAsyncFn = useAsyncFn;
|
package/useAsyncFn.d.ts
CHANGED
|
@@ -20,5 +20,8 @@ export type UseAsyncState<T> = {
|
|
|
20
20
|
};
|
|
21
21
|
type StateFromFunctionReturningPromise<T extends FunctionReturningPromise> = UseAsyncState<PromiseType<ReturnType<T>>>;
|
|
22
22
|
export type UseAsyncFnReturn<T extends FunctionReturningPromise = FunctionReturningPromise> = [StateFromFunctionReturningPromise<T>, T];
|
|
23
|
+
/**
|
|
24
|
+
* @borrows [streamich/react-use](https://github.com/streamich/react-use/blob/master/src/useAsyncFn.ts)
|
|
25
|
+
*/
|
|
23
26
|
export declare let useAsyncFn: <T extends FunctionReturningPromise>(fn: T, deps?: React.DependencyList, initialState?: StateFromFunctionReturningPromise<T>) => UseAsyncFnReturn<T>;
|
|
24
27
|
export default useAsyncFn;
|
package/useAsyncFn.esm.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { useRef, useState, useCallback } from 'react';
|
|
2
2
|
import { useMountedState } from './useMountedState.esm.js';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
* @borrows [streamich/react-use](https://github.com/streamich/react-use/blob/master/src/useAsyncFn.ts)
|
|
6
|
-
*/let useAsyncFn=(o,u=[],l={loading:!1})=>{let a=useRef(0),d=useMountedState(),[i,c]=useState(l),g=useCallback((...e)=>{let t=++a.current;return i.loading||c(e=>({...e,loading:!0})),o(...e).then(e=>(d()&&t===a.current&&c({value:e,loading:!1}),e),e=>(d()&&t===a.current&&c({error:e,loading:!1}),e))},// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
7
|
-
u);return [i,g]};
|
|
4
|
+
let useAsyncFn=(o,u=[],l={loading:!1})=>{let a=useRef(0),d=useMountedState(),[i,c]=useState(l),g=useCallback((...e)=>{let t=++a.current;return i.loading||c(e=>({...e,loading:!0})),o(...e).then(e=>(d()&&t===a.current&&c({value:e,loading:!1}),e),e=>(d()&&t===a.current&&c({error:e,loading:!1}),e))},u);return [i,g]};
|
|
8
5
|
|
|
9
6
|
export { useAsyncFn as default, useAsyncFn };
|
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
* @borrows [streamich/react-use](https://github.com/streamich/react-use/blob/master/src/useFirstMountState.ts)
|
|
9
|
-
*/let useFirstMountState=()=>{let r=react.useRef(!0);return r.current?(r.current=!1,!0):r.current};
|
|
7
|
+
let useFirstMountState=()=>{let r=react.useRef(!0);return r.current?(r.current=!1,!0):r.current};
|
|
10
8
|
|
|
11
9
|
exports.default = useFirstMountState;
|
|
12
10
|
exports.useFirstMountState = useFirstMountState;
|
package/useFirstMountState.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
* @borrows [streamich/react-use](https://github.com/streamich/react-use/blob/master/src/useFirstMountState.ts)
|
|
5
|
-
*/let useFirstMountState=()=>{let r=useRef(!0);return r.current?(r.current=!1,!0):r.current};
|
|
3
|
+
let useFirstMountState=()=>{let r=useRef(!0);return r.current?(r.current=!1,!0):r.current};
|
|
6
4
|
|
|
7
5
|
export { useFirstMountState as default, useFirstMountState };
|
package/useFixedOffset.cjs.js
CHANGED
|
@@ -7,18 +7,7 @@ var utils = require('@koine/utils');
|
|
|
7
7
|
var dom = require('@koine/dom');
|
|
8
8
|
var useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.cjs.js');
|
|
9
9
|
|
|
10
|
-
let n=e=>{dom.injectCss("useFixedOffset",`html{scroll-padding-top: ${e}px}`);}
|
|
11
|
-
* # Use fixed offset
|
|
12
|
-
*
|
|
13
|
-
* Maybe use [ResizeObserver polyfill](https://github.com/juggle/resize-observer)
|
|
14
|
-
*
|
|
15
|
-
* @see https://web.dev/resize-observer/
|
|
16
|
-
*
|
|
17
|
-
* @param selector By default `[data-fixed]`: anyhting with the data attribute `data-fixed`
|
|
18
|
-
*/let useFixedOffset=i=>{let l=react.useRef(0);return useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(()=>{let e=()=>{let e=dom.calculateFixedOffset();l.current=e,// inject this CSS make the hashed deeplinks position the scroll at the
|
|
19
|
-
// right offset
|
|
20
|
-
n(e);};if(e(),!ResizeObserver)return dom.listenResizeDebounced(0,e);{// const elements = domAll("[data-fixed]");
|
|
21
|
-
let e=new ResizeObserver(e=>{let r=0;e.forEach(e=>{r+=e.contentRect.height;}),l.current=r,utils.debounce(()=>n(r),400,!0)();});return dom.domEach(i||"[data-fixed]",t=>{e&&e.observe(t);}),()=>{e?.disconnect();}}},[i]),l};
|
|
10
|
+
let n=e=>{dom.injectCss("useFixedOffset",`html{scroll-padding-top: ${e}px}`);};let useFixedOffset=i=>{let l=react.useRef(0);return useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(()=>{let e=()=>{let e=dom.calculateFixedOffset();l.current=e,n(e);};if(e(),!ResizeObserver)return dom.listenResizeDebounced(0,e);{let e=new ResizeObserver(e=>{let r=0;e.forEach(e=>{r+=e.contentRect.height;}),l.current=r,utils.debounce(()=>n(r),400,!0)();});return dom.domEach(i||"[data-fixed]",t=>{e&&e.observe(t);}),()=>{e?.disconnect();}}},[i]),l};
|
|
22
11
|
|
|
23
12
|
exports.default = useFixedOffset;
|
|
24
13
|
exports.useFixedOffset = useFixedOffset;
|
package/useFixedOffset.d.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # Use fixed offset
|
|
3
|
+
*
|
|
4
|
+
* Maybe use [ResizeObserver polyfill](https://github.com/juggle/resize-observer)
|
|
5
|
+
*
|
|
6
|
+
* @see https://web.dev/resize-observer/
|
|
7
|
+
*
|
|
8
|
+
* @param selector By default `[data-fixed]`: anyhting with the data attribute `data-fixed`
|
|
9
|
+
*/
|
|
1
10
|
export declare let useFixedOffset: (selector?: string) => import("react").MutableRefObject<number>;
|
|
2
11
|
export default useFixedOffset;
|
package/useFixedOffset.esm.js
CHANGED
|
@@ -3,17 +3,6 @@ import { debounce } from '@koine/utils';
|
|
|
3
3
|
import { listenResizeDebounced, domEach, calculateFixedOffset, injectCss } from '@koine/dom';
|
|
4
4
|
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.esm.js';
|
|
5
5
|
|
|
6
|
-
let n=e=>{injectCss("useFixedOffset",`html{scroll-padding-top: ${e}px}`);}
|
|
7
|
-
* # Use fixed offset
|
|
8
|
-
*
|
|
9
|
-
* Maybe use [ResizeObserver polyfill](https://github.com/juggle/resize-observer)
|
|
10
|
-
*
|
|
11
|
-
* @see https://web.dev/resize-observer/
|
|
12
|
-
*
|
|
13
|
-
* @param selector By default `[data-fixed]`: anyhting with the data attribute `data-fixed`
|
|
14
|
-
*/let useFixedOffset=i=>{let l=useRef(0);return useIsomorphicLayoutEffect(()=>{let e=()=>{let e=calculateFixedOffset();l.current=e,// inject this CSS make the hashed deeplinks position the scroll at the
|
|
15
|
-
// right offset
|
|
16
|
-
n(e);};if(e(),!ResizeObserver)return listenResizeDebounced(0,e);{// const elements = domAll("[data-fixed]");
|
|
17
|
-
let e=new ResizeObserver(e=>{let r=0;e.forEach(e=>{r+=e.contentRect.height;}),l.current=r,debounce(()=>n(r),400,!0)();});return domEach(i||"[data-fixed]",t=>{e&&e.observe(t);}),()=>{e?.disconnect();}}},[i]),l};
|
|
6
|
+
let n=e=>{injectCss("useFixedOffset",`html{scroll-padding-top: ${e}px}`);};let useFixedOffset=i=>{let l=useRef(0);return useIsomorphicLayoutEffect(()=>{let e=()=>{let e=calculateFixedOffset();l.current=e,n(e);};if(e(),!ResizeObserver)return listenResizeDebounced(0,e);{let e=new ResizeObserver(e=>{let r=0;e.forEach(e=>{r+=e.contentRect.height;}),l.current=r,debounce(()=>n(r),400,!0)();});return domEach(i||"[data-fixed]",t=>{e&&e.observe(t);}),()=>{e?.disconnect();}}},[i]),l};
|
|
18
7
|
|
|
19
8
|
export { useFixedOffset as default, useFixedOffset };
|
package/useFocus.cjs.js
CHANGED
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
* @see https://stackoverflow.com/a/54159564/1938970
|
|
9
|
-
*/let useFocus=()=>{let r=react.useRef(null);return [r,()=>{r.current&&r.current.focus();}]};
|
|
7
|
+
let useFocus=()=>{let r=react.useRef(null);return [r,()=>{r.current&&r.current.focus();}]};
|
|
10
8
|
|
|
11
9
|
exports.default = useFocus;
|
|
12
10
|
exports.useFocus = useFocus;
|
package/useFocus.d.ts
CHANGED
package/useFocus.esm.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
* @see https://stackoverflow.com/a/54159564/1938970
|
|
5
|
-
*/let useFocus=()=>{let r=useRef(null);return [r,()=>{r.current&&r.current.focus();}]};
|
|
3
|
+
let useFocus=()=>{let r=useRef(null);return [r,()=>{r.current&&r.current.focus();}]};
|
|
6
4
|
|
|
7
5
|
export { useFocus as default, useFocus };
|
package/useInterval.cjs.js
CHANGED
|
@@ -5,12 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var utils = require('@koine/utils');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
* @borrows [dan abramov](https://overreacted.io/making-setinterval-declarative-with-react-hooks/)
|
|
10
|
-
*
|
|
11
|
-
* We just add `deps` array argument and typescript support
|
|
12
|
-
*/let useInterval=(n,l,u=[])=>{let o=react.useRef();react.useEffect(()=>{o.current=n;},// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
13
|
-
[n,...u]),react.useEffect(()=>{if(null!==l){let r=setInterval(function(){o.current&&o.current();},l);return ()=>clearInterval(r)}return utils.noop},[l]);};
|
|
8
|
+
let useInterval=(n,l,u=[])=>{let o=react.useRef();react.useEffect(()=>{o.current=n;},[n,...u]),react.useEffect(()=>{if(null!==l){let r=setInterval(function(){o.current&&o.current();},l);return ()=>clearInterval(r)}return utils.noop},[l]);};
|
|
14
9
|
|
|
15
10
|
exports.default = useInterval;
|
|
16
11
|
exports.useInterval = useInterval;
|
package/useInterval.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @borrows [dan abramov](https://overreacted.io/making-setinterval-declarative-with-react-hooks/)
|
|
3
|
+
*
|
|
4
|
+
* We just add `deps` array argument and typescript support
|
|
5
|
+
*/
|
|
1
6
|
export declare let useInterval: <T extends () => unknown>(callback: T, delay: number, deps?: unknown[]) => void;
|
|
2
7
|
export default useInterval;
|
package/useInterval.esm.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { useRef, useEffect } from 'react';
|
|
2
2
|
import { noop } from '@koine/utils';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
* @borrows [dan abramov](https://overreacted.io/making-setinterval-declarative-with-react-hooks/)
|
|
6
|
-
*
|
|
7
|
-
* We just add `deps` array argument and typescript support
|
|
8
|
-
*/let useInterval=(n,l,u=[])=>{let o=useRef();useEffect(()=>{o.current=n;},// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
9
|
-
[n,...u]),useEffect(()=>{if(null!==l){let r=setInterval(function(){o.current&&o.current();},l);return ()=>clearInterval(r)}return noop},[l]);};
|
|
4
|
+
let useInterval=(n,l,u=[])=>{let o=useRef();useEffect(()=>{o.current=n;},[n,...u]),useEffect(()=>{if(null!==l){let r=setInterval(function(){o.current&&o.current();},l);return ()=>clearInterval(r)}return noop},[l]);};
|
|
10
5
|
|
|
11
6
|
export { useInterval as default, useInterval };
|