@central-icons-react-native/round-outlined-radius-2-stroke-1 1.2.12 → 1.2.14

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 (47) hide show
  1. package/IconAiHarnessDiamond/index.d.ts +4 -0
  2. package/IconAiHarnessDiamond/index.js +3 -0
  3. package/IconAiHarnessDiamond/index.js.map +11 -0
  4. package/IconAiHarnessDiamond/index.mjs +3 -0
  5. package/IconAiHarnessDiamond/index.mjs.map +11 -0
  6. package/IconClapboardOpen/index.d.ts +4 -0
  7. package/IconClapboardOpen/index.js +3 -0
  8. package/IconClapboardOpen/index.js.map +11 -0
  9. package/IconClapboardOpen/index.mjs +3 -0
  10. package/IconClapboardOpen/index.mjs.map +11 -0
  11. package/IconHandAiHarness/index.d.ts +4 -0
  12. package/IconHandAiHarness/index.js +3 -0
  13. package/IconHandAiHarness/index.js.map +11 -0
  14. package/IconHandAiHarness/index.mjs +3 -0
  15. package/IconHandAiHarness/index.mjs.map +11 -0
  16. package/IconHandHeart/index.d.ts +4 -0
  17. package/IconHandHeart/index.js +3 -0
  18. package/IconHandHeart/index.js.map +11 -0
  19. package/IconHandHeart/index.mjs +3 -0
  20. package/IconHandHeart/index.mjs.map +11 -0
  21. package/IconHomeview/index.js +2 -2
  22. package/IconHomeview/index.js.map +3 -3
  23. package/IconHomeview/index.mjs +2 -2
  24. package/IconHomeview/index.mjs.map +3 -3
  25. package/IconMoneyHand/index.js +2 -2
  26. package/IconMoneyHand/index.js.map +3 -3
  27. package/IconMoneyHand/index.mjs +2 -2
  28. package/IconMoneyHand/index.mjs.map +3 -3
  29. package/IconWidgets/index.d.ts +4 -0
  30. package/IconWidgets/index.js +3 -0
  31. package/IconWidgets/index.js.map +11 -0
  32. package/IconWidgets/index.mjs +3 -0
  33. package/IconWidgets/index.mjs.map +11 -0
  34. package/README.md +5 -0
  35. package/filtered-icons.json +1 -1
  36. package/icons/index.d.ts +1 -1
  37. package/icons/index.js +2 -2
  38. package/icons/index.js.map +3 -3
  39. package/icons/index.mjs +2 -2
  40. package/icons/index.mjs.map +3 -3
  41. package/icons-index.json +4 -4
  42. package/index.d.ts +5 -0
  43. package/index.js +15 -0
  44. package/index.mjs +5 -0
  45. package/license-check.js +1 -1
  46. package/package.json +1 -1
  47. package/skills/central-icons-react-native/SKILL.md +8 -3
@@ -0,0 +1,3 @@
1
+ var w=Object.create;var{getPrototypeOf:M,defineProperty:p,getOwnPropertyNames:g,getOwnPropertyDescriptor:S}=Object,m=Object.prototype.hasOwnProperty;function h(n){return this[n]}var v,L,f=(n,o,r)=>{var t=n!=null&&typeof n==="object";if(t){var d=o?v??=new WeakMap:L??=new WeakMap,l=d.get(n);if(l)return l}r=n!=null?w(M(n)):{};let i=o||!n||!n.__esModule||!m.call(n,"default")?p(r,"default",{value:n,enumerable:!0}):r;if(n&&typeof n==="object"||typeof n==="function"){for(let c of g(n))if(!m.call(i,c))p(i,c,{get:h.bind(n,c),enumerable:!0})}if(t)d.set(n,i);return i},k=(n)=>{var o=(I??=new WeakMap).get(n),r;if(o)return o;if(o=p({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function"){for(var t of g(n))if(!m.call(o,t))p(o,t,{get:h.bind(n,t),enumerable:!(r=S(n,t))||r.enumerable})}return I.set(n,o),o},I;var F=(n)=>n;function b(n,o){this[n]=F.bind(null,o)}var P=(n,o)=>{for(var r in o)p(n,r,{get:o[r],enumerable:!0,configurable:!0,set:b.bind(o,r)})};var U={};P(U,{IconWidgets:()=>B,default:()=>V});module.exports=k(U);var G={};P(G,{CentralIconBase:()=>C});var a=f(require("react"));var e=f(require("react")),s=require("react-native-svg"),H=(n)=>{let o=e.default.useId();return e.default.createElement(y,{...n,instanceId:o})},j=0,x=typeof e.default.useId==="function"?void 0:class extends e.default.Component{state={};componentDidMount(){this.setState({instanceId:`legacy-${++j}`})}render(){return e.default.createElement(y,{...this.props.iconProps,instanceId:this.state.instanceId})}},C=(n)=>x?e.default.createElement(x,{iconProps:n}):e.default.createElement(H,{...n}),y=({children:n,size:o=24,mode:r="masked",maskId:t,instanceId:d,...l})=>{let i=d?`${t}-${d}`:t,c=r!=="raw"&&!!t;return e.default.createElement(s.Svg,{...l,width:typeof o==="number"?`${o}px`:o,height:typeof o==="number"?`${o}px`:o,viewBox:"0 0 24 24",fill:"none"},c?e.default.createElement(e.default.Fragment,null,e.default.createElement(s.Mask,{id:i,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"24",height:"24"},e.default.createElement(s.Rect,{width:"24",height:"24",fill:"#000"}),e.default.createElement(s.G,{color:"#fff"},n)),e.default.createElement(s.Rect,{width:"24",height:"24",fill:"currentColor",mask:`url(#${i})`})):n)};var u=require("react-native-svg"),B=a.default.memo((n)=>a.default.createElement(C,{...n,maskId:"round-outlined-radius-2-stroke-1-IconWidgets"},a.default.createElement(u.Path,{d:"M18.5 3.5H5.5C4.39543 3.5 3.5 4.39543 3.5 5.5V18.5C3.5 19.6046 4.39543 20.5 5.5 20.5H18.5C19.6046 20.5 20.5 19.6046 20.5 18.5V5.5C20.5 4.39543 19.6046 3.5 18.5 3.5Z",stroke:"currentColor"}),a.default.createElement(u.Path,{d:"M7.5 16.5H16.5",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),a.default.createElement(u.Rect,{x:"7.5",y:"7.5",width:"4",height:"4",rx:"0.5",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}))),V=B;
2
+
3
+ //# debugId=D5A4A65F7C9D62FF64756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/IconWidgets/index.tsx", "src/CentralIconBase/index.tsx"],
4
+ "sourcesContent": [
5
+ "import React from \"react\";\nimport { CentralIconBase, type CentralIconBaseProps } from \"../CentralIconBase\";\nimport { Path, Rect } from \"react-native-svg\";\n\nexport const IconWidgets: React.NamedExoticComponent<CentralIconBaseProps> = React.memo((props) => {\n return <CentralIconBase {...props} maskId=\"round-outlined-radius-2-stroke-1-IconWidgets\"><Path d=\"M18.5 3.5H5.5C4.39543 3.5 3.5 4.39543 3.5 5.5V18.5C3.5 19.6046 4.39543 20.5 5.5 20.5H18.5C19.6046 20.5 20.5 19.6046 20.5 18.5V5.5C20.5 4.39543 19.6046 3.5 18.5 3.5Z\" stroke=\"currentColor\"/><Path d=\"M7.5 16.5H16.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/><Rect x=\"7.5\" y=\"7.5\" width=\"4\" height=\"4\" rx=\"0.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></CentralIconBase>;\n});\n\nexport default IconWidgets;\n",
6
+ "import React, { FC } from \"react\";\nimport { Svg, Mask, Rect, G, SvgProps } from \"react-native-svg\";\n\nexport type CentralIconBaseProps = {\n size?: string | number;\n mode?: \"masked\" | \"raw\";\n maskId?: string;\n} & SvgProps;\n\ntype Props = CentralIconBaseProps;\n\nconst ModernCentralIconBase: React.FC<Props> = (props) => {\n const instanceId = React.useId();\n return <CentralIconSvg {...props} instanceId={instanceId} />;\n};\n\nlet nextLegacyId = 0;\n\n// React's Server Components runtime exposes useId but not Component. Only\n// define the legacy class when it is needed, so modern imports stay RSC-safe.\nconst LegacyCentralIconBase =\n typeof React.useId === \"function\"\n ? undefined\n : class extends React.Component<\n { iconProps: Props },\n { instanceId?: string }\n > {\n state: { instanceId?: string } = {};\n\n componentDidMount() {\n // Defer legacy IDs until mount so server and initial client markup agree.\n this.setState({ instanceId: `legacy-${++nextLegacyId}` });\n }\n\n render() {\n return <CentralIconSvg {...this.props.iconProps} instanceId={this.state.instanceId} />;\n }\n };\n\nexport const CentralIconBase: React.FC<Props> = (props) =>\n LegacyCentralIconBase ? (\n <LegacyCentralIconBase iconProps={props} />\n ) : (\n <ModernCentralIconBase {...props} />\n );\n\nconst CentralIconSvg: FC<CentralIconBaseProps & { instanceId?: string }> = ({\n children,\n size = 24,\n mode = \"masked\",\n maskId,\n instanceId,\n ...props\n}) => {\n const uniqueMaskId = instanceId ? `${maskId}-${instanceId}` : maskId;\n const masked = mode !== \"raw\" && !!maskId;\n return (\n <Svg\n {...props}\n width={typeof size === \"number\" ? `${size}px` : size}\n height={typeof size === \"number\" ? `${size}px` : size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n {masked ? (\n <>\n <Mask\n id={uniqueMaskId}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"24\"\n height=\"24\"\n >\n <Rect width=\"24\" height=\"24\" fill=\"#000\" />\n <G color=\"#fff\">{children}</G>\n </Mask>\n <Rect\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n mask={`url(#${uniqueMaskId})`}\n />\n </>\n ) : (\n children\n )}\n </Svg>\n );\n};\n"
7
+ ],
8
+ "mappings": "gjCAAkB,IAAlB,sBCA0B,IAA1B,sBACA,8BAUM,EAAyC,CAAC,IAAU,CACxD,IAAM,EAAa,UAAM,MAAM,EAC/B,OAAO,wBAAC,EAAD,IAAoB,EAAO,WAAY,EAAY,GAGxD,EAAe,EAIb,EACJ,OAAO,UAAM,QAAU,WACnB,OACA,cAAc,UAAM,SAGlB,CACA,MAAiC,CAAC,EAElC,iBAAiB,EAAG,CAElB,KAAK,SAAS,CAAE,WAAY,UAAU,EAAE,GAAe,CAAC,EAG1D,MAAM,EAAG,CACP,OAAO,wBAAC,EAAD,IAAoB,KAAK,MAAM,UAAW,WAAY,KAAK,MAAM,WAAY,EAExF,EAEO,EAAmC,CAAC,IAC/C,EACE,wBAAC,EAAD,CAAuB,UAAW,EAAO,EAEzC,wBAAC,EAAD,IAA2B,EAAO,EAGhC,EAAqE,EACzE,WACA,OAAO,GACP,OAAO,SACP,SACA,gBACG,KACC,CACJ,IAAM,EAAe,EAAa,GAAG,KAAU,IAAe,EACxD,EAAS,IAAS,OAAS,CAAC,CAAC,EACnC,OACE,wBA8BE,MA9BF,IACM,EACJ,MAAO,OAAO,IAAS,SAAW,GAAG,MAAW,EAChD,OAAQ,OAAO,IAAS,SAAW,GAAG,MAAW,EACjD,QAAQ,YACR,KAAK,QAEJ,EACC,gDACE,wBAUE,OAVF,CACE,GAAI,EACJ,UAAU,iBACV,EAAE,IACF,EAAE,IACF,MAAM,KACN,OAAO,MAEP,wBAAC,OAAD,CAAM,MAAM,KAAK,OAAO,KAAK,KAAK,OAAO,EACzC,wBAA4B,IAA5B,CAAG,MAAM,QAAQ,CAAW,CAC5B,EACF,wBAAC,OAAD,CACE,MAAM,KACN,OAAO,KACP,KAAK,eACL,KAAM,QAAQ,KAChB,CACA,EAEF,CAEF,GDrFqB,IAA3B,8BAEa,EAAgE,UAAM,KAAK,CAAC,IAChF,wBAA+e,EAA/e,IAAqB,EAAO,OAAO,gDAA+C,wBAAC,OAAD,CAAM,EAAE,uKAAuK,OAAO,eAAc,EAAE,wBAAC,OAAD,CAAM,EAAE,iBAAiB,OAAO,eAAe,cAAc,QAAQ,eAAe,QAAO,EAAE,wBAAC,OAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,IAAI,OAAO,IAAI,GAAG,MAAM,OAAO,eAAe,cAAc,QAAQ,eAAe,QAAO,CAAI,CACvf,EAEc",
9
+ "debugId": "D5A4A65F7C9D62FF64756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,3 @@
1
+ import r from"react";import n from"react";import{Svg as I,Mask as g,Rect as a,G as h}from"react-native-svg";var f=(o)=>{let e=n.useId();return n.createElement(p,{...o,instanceId:e})},k=0,d=typeof n.useId==="function"?void 0:class extends n.Component{state={};componentDidMount(){this.setState({instanceId:`legacy-${++k}`})}render(){return n.createElement(p,{...this.props.iconProps,instanceId:this.state.instanceId})}},c=(o)=>d?n.createElement(d,{iconProps:o}):n.createElement(f,{...o}),p=({children:o,size:e=24,mode:l="masked",maskId:t,instanceId:s,...m})=>{let i=s?`${t}-${s}`:t,C=l!=="raw"&&!!t;return n.createElement(I,{...m,width:typeof e==="number"?`${e}px`:e,height:typeof e==="number"?`${e}px`:e,viewBox:"0 0 24 24",fill:"none"},C?n.createElement(n.Fragment,null,n.createElement(g,{id:i,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"24",height:"24"},n.createElement(a,{width:"24",height:"24",fill:"#000"}),n.createElement(h,{color:"#fff"},o)),n.createElement(a,{width:"24",height:"24",fill:"currentColor",mask:`url(#${i})`})):o)};import{Path as u,Rect as P}from"react-native-svg";var x=r.memo((o)=>r.createElement(c,{...o,maskId:"round-outlined-radius-2-stroke-1-IconWidgets"},r.createElement(u,{d:"M18.5 3.5H5.5C4.39543 3.5 3.5 4.39543 3.5 5.5V18.5C3.5 19.6046 4.39543 20.5 5.5 20.5H18.5C19.6046 20.5 20.5 19.6046 20.5 18.5V5.5C20.5 4.39543 19.6046 3.5 18.5 3.5Z",stroke:"currentColor"}),r.createElement(u,{d:"M7.5 16.5H16.5",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),r.createElement(P,{x:"7.5",y:"7.5",width:"4",height:"4",rx:"0.5",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}))),j=x;export{x as IconWidgets,j as default};
2
+
3
+ //# debugId=465CD44507A4654864756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/IconWidgets/index.tsx", "src/CentralIconBase/index.tsx"],
4
+ "sourcesContent": [
5
+ "import React from \"react\";\nimport { CentralIconBase, type CentralIconBaseProps } from \"../CentralIconBase\";\nimport { Path, Rect } from \"react-native-svg\";\n\nexport const IconWidgets: React.NamedExoticComponent<CentralIconBaseProps> = React.memo((props) => {\n return <CentralIconBase {...props} maskId=\"round-outlined-radius-2-stroke-1-IconWidgets\"><Path d=\"M18.5 3.5H5.5C4.39543 3.5 3.5 4.39543 3.5 5.5V18.5C3.5 19.6046 4.39543 20.5 5.5 20.5H18.5C19.6046 20.5 20.5 19.6046 20.5 18.5V5.5C20.5 4.39543 19.6046 3.5 18.5 3.5Z\" stroke=\"currentColor\"/><Path d=\"M7.5 16.5H16.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/><Rect x=\"7.5\" y=\"7.5\" width=\"4\" height=\"4\" rx=\"0.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></CentralIconBase>;\n});\n\nexport default IconWidgets;\n",
6
+ "import React, { FC } from \"react\";\nimport { Svg, Mask, Rect, G, SvgProps } from \"react-native-svg\";\n\nexport type CentralIconBaseProps = {\n size?: string | number;\n mode?: \"masked\" | \"raw\";\n maskId?: string;\n} & SvgProps;\n\ntype Props = CentralIconBaseProps;\n\nconst ModernCentralIconBase: React.FC<Props> = (props) => {\n const instanceId = React.useId();\n return <CentralIconSvg {...props} instanceId={instanceId} />;\n};\n\nlet nextLegacyId = 0;\n\n// React's Server Components runtime exposes useId but not Component. Only\n// define the legacy class when it is needed, so modern imports stay RSC-safe.\nconst LegacyCentralIconBase =\n typeof React.useId === \"function\"\n ? undefined\n : class extends React.Component<\n { iconProps: Props },\n { instanceId?: string }\n > {\n state: { instanceId?: string } = {};\n\n componentDidMount() {\n // Defer legacy IDs until mount so server and initial client markup agree.\n this.setState({ instanceId: `legacy-${++nextLegacyId}` });\n }\n\n render() {\n return <CentralIconSvg {...this.props.iconProps} instanceId={this.state.instanceId} />;\n }\n };\n\nexport const CentralIconBase: React.FC<Props> = (props) =>\n LegacyCentralIconBase ? (\n <LegacyCentralIconBase iconProps={props} />\n ) : (\n <ModernCentralIconBase {...props} />\n );\n\nconst CentralIconSvg: FC<CentralIconBaseProps & { instanceId?: string }> = ({\n children,\n size = 24,\n mode = \"masked\",\n maskId,\n instanceId,\n ...props\n}) => {\n const uniqueMaskId = instanceId ? `${maskId}-${instanceId}` : maskId;\n const masked = mode !== \"raw\" && !!maskId;\n return (\n <Svg\n {...props}\n width={typeof size === \"number\" ? `${size}px` : size}\n height={typeof size === \"number\" ? `${size}px` : size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n {masked ? (\n <>\n <Mask\n id={uniqueMaskId}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"24\"\n height=\"24\"\n >\n <Rect width=\"24\" height=\"24\" fill=\"#000\" />\n <G color=\"#fff\">{children}</G>\n </Mask>\n <Rect\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n mask={`url(#${uniqueMaskId})`}\n />\n </>\n ) : (\n children\n )}\n </Svg>\n );\n};\n"
7
+ ],
8
+ "mappings": "AAAA,qBCAA,qBACA,cAAS,UAAK,UAAM,OAAM,yBAU1B,IAAM,EAAyC,CAAC,IAAU,CACxD,IAAM,EAAa,EAAM,MAAM,EAC/B,OAAO,gBAAC,EAAD,IAAoB,EAAO,WAAY,EAAY,GAGxD,EAAe,EAIb,EACJ,OAAO,EAAM,QAAU,WACnB,OACA,cAAc,EAAM,SAGlB,CACA,MAAiC,CAAC,EAElC,iBAAiB,EAAG,CAElB,KAAK,SAAS,CAAE,WAAY,UAAU,EAAE,GAAe,CAAC,EAG1D,MAAM,EAAG,CACP,OAAO,gBAAC,EAAD,IAAoB,KAAK,MAAM,UAAW,WAAY,KAAK,MAAM,WAAY,EAExF,EAEO,EAAmC,CAAC,IAC/C,EACE,gBAAC,EAAD,CAAuB,UAAW,EAAO,EAEzC,gBAAC,EAAD,IAA2B,EAAO,EAGhC,EAAqE,EACzE,WACA,OAAO,GACP,OAAO,SACP,SACA,gBACG,KACC,CACJ,IAAM,EAAe,EAAa,GAAG,KAAU,IAAe,EACxD,EAAS,IAAS,OAAS,CAAC,CAAC,EACnC,OACE,gBA8BE,EA9BF,IACM,EACJ,MAAO,OAAO,IAAS,SAAW,GAAG,MAAW,EAChD,OAAQ,OAAO,IAAS,SAAW,GAAG,MAAW,EACjD,QAAQ,YACR,KAAK,QAEJ,EACC,gCACE,gBAUE,EAVF,CACE,GAAI,EACJ,UAAU,iBACV,EAAE,IACF,EAAE,IACF,MAAM,KACN,OAAO,MAEP,gBAAC,EAAD,CAAM,MAAM,KAAK,OAAO,KAAK,KAAK,OAAO,EACzC,gBAA4B,EAA5B,CAAG,MAAM,QAAQ,CAAW,CAC5B,EACF,gBAAC,EAAD,CACE,MAAM,KACN,OAAO,KACP,KAAK,eACL,KAAM,QAAQ,KAChB,CACA,EAEF,CAEF,GDrFN,eAAS,UAAM,yBAER,IAAM,EAAgE,EAAM,KAAK,CAAC,IAChF,gBAA+e,EAA/e,IAAqB,EAAO,OAAO,gDAA+C,gBAAC,EAAD,CAAM,EAAE,uKAAuK,OAAO,eAAc,EAAE,gBAAC,EAAD,CAAM,EAAE,iBAAiB,OAAO,eAAe,cAAc,QAAQ,eAAe,QAAO,EAAE,gBAAC,EAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,IAAI,OAAO,IAAI,GAAG,MAAM,OAAO,eAAe,cAAc,QAAQ,eAAe,QAAO,CAAI,CACvf,EAEc",
9
+ "debugId": "465CD44507A4654864756E2164756E21",
10
+ "names": []
11
+ }
package/README.md CHANGED
@@ -261,6 +261,7 @@ Below is a complete list of available icons:
261
261
  - IconAiBotHeadTriangle
262
262
  - IconAiBotHeadLeaf
263
263
  - IconAiBotHeadStar
264
+ - IconAiHarnessDiamond
264
265
 
265
266
  ### Accessibility
266
267
 
@@ -1130,6 +1131,8 @@ Below is a complete list of available icons:
1130
1131
  - IconBecepsLeftArm
1131
1132
  - IconBecepsRightArm
1132
1133
  - IconHandTouch
1134
+ - IconHandAiHarness
1135
+ - IconHandHeart
1133
1136
 
1134
1137
  ### Health & Medical
1135
1138
 
@@ -1651,6 +1654,7 @@ Below is a complete list of available icons:
1651
1654
  - IconStopShareScreen
1652
1655
  - IconReferenceImage
1653
1656
  - IconSpotlight
1657
+ - IconClapboardOpen
1654
1658
 
1655
1659
  ### Security
1656
1660
 
@@ -2212,6 +2216,7 @@ Below is a complete list of available icons:
2212
2216
  - IconSkull
2213
2217
  - IconPumpkin
2214
2218
  - IconHistorgram
2219
+ - IconWidgets
2215
2220
 
2216
2221
  ### Time & Date
2217
2222