create-spfx-tailwind-app 1.0.10
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/Readme.md +205 -0
- package/Template/.eslintrc.js +321 -0
- package/Template/.vscode/launch.json +23 -0
- package/Template/.vscode/settings.json +14 -0
- package/Template/.yo-rc.json +19 -0
- package/Template/README.md +190 -0
- package/Template/config/config.json +18 -0
- package/Template/config/deploy-azure-storage.json +7 -0
- package/Template/config/package-solution.json +40 -0
- package/Template/config/rig.json +7 -0
- package/Template/config/sass.json +5 -0
- package/Template/config/serve.json +6 -0
- package/Template/config/typescript.json +9 -0
- package/Template/config/write-manifests.json +4 -0
- package/Template/package-lock.json +21549 -0
- package/Template/package.json +60 -0
- package/Template/postcss.config.js +6 -0
- package/Template/setup.js +75 -0
- package/Template/src/tailwind.generated.css +559 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/__PROJECT_NAME__WebPart.manifest.json +28 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/__PROJECT_NAME__WebPart.ts +181 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/assets/welcome-dark.png +0 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/assets/welcome-light.png +0 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/components/I__PROJECT_NAME__Props.ts +12 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/components/__PROJECT_NAME__.tsx +9 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/loc/en-us.js +16 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/loc/mystrings.d.ts +19 -0
- package/Template/src/webparts/__PROJECT_NAME_LOWER__/tailwind.css +3 -0
- package/Template/tailwind.config.js +8 -0
- package/Template/teams/aa77f8d0-89f1-4335-816c-cb8bffa03b3c_color.png +0 -0
- package/Template/teams/aa77f8d0-89f1-4335-816c-cb8bffa03b3c_outline.png +0 -0
- package/Template/tsconfig.json +3 -0
- package/index.js +137 -0
- package/package.json +42 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-web-part-manifest.schema.json",
|
|
3
|
+
"id": "aa77f8d0-89f1-4335-816c-cb8bffa03b3c",
|
|
4
|
+
"alias": "TemplateSpfxWebPart",
|
|
5
|
+
"componentType": "WebPart",
|
|
6
|
+
|
|
7
|
+
// The "*" signifies that the version should be taken from the package.json
|
|
8
|
+
"version": "*",
|
|
9
|
+
"manifestVersion": 2,
|
|
10
|
+
|
|
11
|
+
// If true, the component can only be installed on sites where Custom Script is allowed.
|
|
12
|
+
// Components that allow authors to embed arbitrary script code should set this to true.
|
|
13
|
+
// https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f
|
|
14
|
+
"requiresCustomScript": false,
|
|
15
|
+
"supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"],
|
|
16
|
+
"supportsThemeVariants": true,
|
|
17
|
+
|
|
18
|
+
"preconfiguredEntries": [{
|
|
19
|
+
"groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced
|
|
20
|
+
"group": { "default": "Advanced" },
|
|
21
|
+
"title": { "default": "__PROJECT_NAME__" },
|
|
22
|
+
"description": { "default": "__PROJECT_NAME__ description" },
|
|
23
|
+
"officeFabricIconFontName": "Page",
|
|
24
|
+
"properties": {
|
|
25
|
+
"description": "__PROJECT_NAME__"
|
|
26
|
+
}
|
|
27
|
+
}]
|
|
28
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as ReactDom from 'react-dom';
|
|
3
|
+
import { Version } from '@microsoft/sp-core-library';
|
|
4
|
+
import {
|
|
5
|
+
type IPropertyPaneConfiguration,
|
|
6
|
+
PropertyPaneTextField
|
|
7
|
+
} from '@microsoft/sp-property-pane';
|
|
8
|
+
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
|
|
9
|
+
import { IReadonlyTheme } from '@microsoft/sp-component-base';
|
|
10
|
+
import { SPHttpClient, SPHttpClientResponse } from "@microsoft/sp-http";
|
|
11
|
+
import "../../tailwind.generated.css";
|
|
12
|
+
import * as strings from 'TemplateSpfxWebPartStrings';
|
|
13
|
+
import __PROJECT_NAME__ from "./components/__PROJECT_NAME__";
|
|
14
|
+
import { I__PROJECT_NAME__Props } from './components/I__PROJECT_NAME__Props';
|
|
15
|
+
import $ from "jquery";
|
|
16
|
+
export interface I__PROJECT_NAME__WebPartProps {
|
|
17
|
+
description: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default class __PROJECT_NAME__WebPart extends BaseClientSideWebPart<I__PROJECT_NAME__WebPartProps> {
|
|
21
|
+
private _isDarkTheme: boolean = false;
|
|
22
|
+
private _environmentMessage: string = "";
|
|
23
|
+
public getCurrentUserGroups(requester: SPHttpClient, siteUrl: string): any {
|
|
24
|
+
try {
|
|
25
|
+
return requester
|
|
26
|
+
.get(
|
|
27
|
+
`${siteUrl}/_api/web/currentuser/?$select=Title,Email,LoginName,Id&$expand=groups`,
|
|
28
|
+
SPHttpClient.configurations.v1,
|
|
29
|
+
{
|
|
30
|
+
headers: {
|
|
31
|
+
Accept: "application/json;odata=verbose",
|
|
32
|
+
"odata-version": "",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
)
|
|
36
|
+
.then((response: SPHttpClientResponse) => {
|
|
37
|
+
return response.json();
|
|
38
|
+
})
|
|
39
|
+
.then((json: any) => {
|
|
40
|
+
return json;
|
|
41
|
+
});
|
|
42
|
+
} catch (error: any) {
|
|
43
|
+
console.log(
|
|
44
|
+
`Error occured in getEntity method in factory.ts. Error message: ${error.message}`,
|
|
45
|
+
);
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public render(): void {
|
|
51
|
+
this.getCurrentUserGroups(
|
|
52
|
+
this.context.spHttpClient,
|
|
53
|
+
this.context.pageContext.web.absoluteUrl,
|
|
54
|
+
).then((currentUser: any) => {
|
|
55
|
+
const element: React.ReactElement<I__PROJECT_NAME__Props> =
|
|
56
|
+
React.createElement(__PROJECT_NAME__, {
|
|
57
|
+
newcontext: this.context,
|
|
58
|
+
newsiteUrl: this.context.pageContext.web.absoluteUrl,
|
|
59
|
+
newlistName: "",
|
|
60
|
+
newspHttpClient: this.context.spHttpClient,
|
|
61
|
+
newrelativeUrl: this.context.pageContext.web.serverRelativeUrl,
|
|
62
|
+
newcurrentUserId: currentUser?.d?.Id ? currentUser.d.Id : -1,
|
|
63
|
+
newcurrentUserName: currentUser?.d?.Title ? currentUser.d.Title : "",
|
|
64
|
+
newgroups: currentUser?.d?.Groups?.results || [],
|
|
65
|
+
newcurrentUserEmail: this.context.pageContext.user.email,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
ReactDom.render(element, this.domElement);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
protected onInit(): Promise<void> {
|
|
73
|
+
return super.onInit().then(() => {
|
|
74
|
+
document.title = "MIS Repository";
|
|
75
|
+
|
|
76
|
+
// Add body class safely
|
|
77
|
+
$("body").addClass("ms-backgroundImage");
|
|
78
|
+
|
|
79
|
+
// Inject CSS (FIXED - all rules together)
|
|
80
|
+
const style = document.createElement("style");
|
|
81
|
+
style.innerHTML = `
|
|
82
|
+
#spLeftNav,
|
|
83
|
+
#SuiteNavWrapper,
|
|
84
|
+
#CommentsWrapper,
|
|
85
|
+
#sp-appBar,
|
|
86
|
+
.headerRow-107,
|
|
87
|
+
.commandBarButtonHeightAndColor,
|
|
88
|
+
.fui-Toolbar,
|
|
89
|
+
.simpleFooterContainer-196,
|
|
90
|
+
.p_i-Dej_1x34n,
|
|
91
|
+
div[data-automation-id="pageHeader"],
|
|
92
|
+
div[data-automation-id="SiteHeader"],
|
|
93
|
+
div[data-automation-id="MegaFooter"],
|
|
94
|
+
div[data-automation-id="gradientBox"],
|
|
95
|
+
div[data-automation-id="LeftNavGroups"] {
|
|
96
|
+
display: none !important;
|
|
97
|
+
}
|
|
98
|
+
`;
|
|
99
|
+
document.head.appendChild(style);
|
|
100
|
+
|
|
101
|
+
// Delay + repeat (IMPORTANT for SPFx dynamic DOM)
|
|
102
|
+
const hideElements = () => {
|
|
103
|
+
$("div[data-automation-id='pageHeader']").hide();
|
|
104
|
+
$("div[data-automation-id='SiteHeader']").hide();
|
|
105
|
+
$("div[data-automation-id='SimpleFooter']").parent().hide();
|
|
106
|
+
$("div[data-automation-id='SiteHeaderOverlay']").parent().hide();
|
|
107
|
+
$("div[data-automation-id='MegaFooter']").hide();
|
|
108
|
+
$("div[data-automation-id='gradientBox']").parent().hide();
|
|
109
|
+
$("div[data-automation-id='LeftNavGroups']").parent().hide();
|
|
110
|
+
|
|
111
|
+
$("#spLeftNav").hide();
|
|
112
|
+
$("#SuiteNavWrapper").hide();
|
|
113
|
+
$("#CommentsWrapper").hide();
|
|
114
|
+
$("#sp-appBar").hide();
|
|
115
|
+
|
|
116
|
+
$(".headerRow-107").hide();
|
|
117
|
+
$(".commandBarButtonHeightAndColor").hide();
|
|
118
|
+
$(".fui-Toolbar").hide();
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// Run multiple times (handles re-render)
|
|
122
|
+
const interval = setInterval(hideElements, 1000);
|
|
123
|
+
|
|
124
|
+
// Stop after 10 seconds (optional cleanup)
|
|
125
|
+
setTimeout(() => clearInterval(interval), 10000);
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
protected onThemeChanged(currentTheme: IReadonlyTheme | undefined): void {
|
|
132
|
+
if (!currentTheme) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
this._isDarkTheme = !!currentTheme.isInverted;
|
|
137
|
+
const { semanticColors } = currentTheme;
|
|
138
|
+
|
|
139
|
+
if (semanticColors) {
|
|
140
|
+
this.domElement.style.setProperty(
|
|
141
|
+
"--bodyText",
|
|
142
|
+
semanticColors.bodyText || null,
|
|
143
|
+
);
|
|
144
|
+
this.domElement.style.setProperty("--link", semanticColors.link || null);
|
|
145
|
+
this.domElement.style.setProperty(
|
|
146
|
+
"--linkHovered",
|
|
147
|
+
semanticColors.linkHovered || null,
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
protected onDispose(): void {
|
|
153
|
+
ReactDom.unmountComponentAtNode(this.domElement);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
protected get dataVersion(): Version {
|
|
157
|
+
return Version.parse("1.0");
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {
|
|
161
|
+
return {
|
|
162
|
+
pages: [
|
|
163
|
+
{
|
|
164
|
+
header: {
|
|
165
|
+
description: strings.PropertyPaneDescription,
|
|
166
|
+
},
|
|
167
|
+
groups: [
|
|
168
|
+
{
|
|
169
|
+
groupName: strings.BasicGroupName,
|
|
170
|
+
groupFields: [
|
|
171
|
+
PropertyPaneTextField("description", {
|
|
172
|
+
label: strings.DescriptionFieldLabel,
|
|
173
|
+
}),
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WebPartContext } from "@microsoft/sp-webpart-base";
|
|
2
|
+
export interface I__PROJECT_NAME__Props {
|
|
3
|
+
newcontext: WebPartContext;
|
|
4
|
+
newsiteUrl: string;
|
|
5
|
+
newlistName: string;
|
|
6
|
+
newspHttpClient: any;
|
|
7
|
+
newrelativeUrl: string;
|
|
8
|
+
newcurrentUserId: number;
|
|
9
|
+
newgroups?: any;
|
|
10
|
+
newcurrentUserName: string;
|
|
11
|
+
newcurrentUserEmail: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
define([], function() {
|
|
2
|
+
return {
|
|
3
|
+
"PropertyPaneDescription": "Description",
|
|
4
|
+
"BasicGroupName": "Group Name",
|
|
5
|
+
"DescriptionFieldLabel": "Description Field",
|
|
6
|
+
"AppLocalEnvironmentSharePoint": "The app is running on your local environment as SharePoint web part",
|
|
7
|
+
"AppLocalEnvironmentTeams": "The app is running on your local environment as Microsoft Teams app",
|
|
8
|
+
"AppLocalEnvironmentOffice": "The app is running on your local environment in office.com",
|
|
9
|
+
"AppLocalEnvironmentOutlook": "The app is running on your local environment in Outlook",
|
|
10
|
+
"AppSharePointEnvironment": "The app is running on SharePoint page",
|
|
11
|
+
"AppTeamsTabEnvironment": "The app is running in Microsoft Teams",
|
|
12
|
+
"AppOfficeEnvironment": "The app is running in office.com",
|
|
13
|
+
"AppOutlookEnvironment": "The app is running in Outlook",
|
|
14
|
+
"UnknownEnvironment": "The app is running in an unknown environment"
|
|
15
|
+
}
|
|
16
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
declare interface ITemplateSpfxWebPartStrings {
|
|
2
|
+
PropertyPaneDescription: string;
|
|
3
|
+
BasicGroupName: string;
|
|
4
|
+
DescriptionFieldLabel: string;
|
|
5
|
+
AppLocalEnvironmentSharePoint: string;
|
|
6
|
+
AppLocalEnvironmentTeams: string;
|
|
7
|
+
AppLocalEnvironmentOffice: string;
|
|
8
|
+
AppLocalEnvironmentOutlook: string;
|
|
9
|
+
AppSharePointEnvironment: string;
|
|
10
|
+
AppTeamsTabEnvironment: string;
|
|
11
|
+
AppOfficeEnvironment: string;
|
|
12
|
+
AppOutlookEnvironment: string;
|
|
13
|
+
UnknownEnvironment: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare module 'TemplateSpfxWebPartStrings' {
|
|
17
|
+
const strings: ITemplateSpfxWebPartStrings;
|
|
18
|
+
export = strings;
|
|
19
|
+
}
|
|
Binary file
|
|
Binary file
|
package/index.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const { execSync } = require("child_process");
|
|
6
|
+
const chalk = require("chalk");
|
|
7
|
+
const ora = require("ora");
|
|
8
|
+
const inquirer = require("inquirer");
|
|
9
|
+
const figlet = require("figlet");
|
|
10
|
+
const gradient = require("gradient-string").default;
|
|
11
|
+
|
|
12
|
+
// šØ Banner
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
console.log(
|
|
16
|
+
gradient.instagram(figlet.textSync("SPFx CLI", { horizontalLayout: "full" })),
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
async function run() {
|
|
20
|
+
try {
|
|
21
|
+
const args = process.argv.slice(2);
|
|
22
|
+
|
|
23
|
+
// š¹ detect flags
|
|
24
|
+
const noInstallFlag = args.includes("--no-install");
|
|
25
|
+
|
|
26
|
+
// š¹ get project name
|
|
27
|
+
let projectName = args.find((arg) => !arg.startsWith("--"));
|
|
28
|
+
|
|
29
|
+
if (!projectName) {
|
|
30
|
+
const answer = await inquirer.prompt([
|
|
31
|
+
{
|
|
32
|
+
type: "input",
|
|
33
|
+
name: "name",
|
|
34
|
+
message: "Project name:",
|
|
35
|
+
default: "my-spfx-app",
|
|
36
|
+
validate: (input) => {
|
|
37
|
+
if (!input) return "Project name is required";
|
|
38
|
+
if (fs.existsSync(input)) return "Folder already exists";
|
|
39
|
+
return true;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
]);
|
|
43
|
+
projectName = answer.name;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const templateDir = path.join(__dirname, "Template");
|
|
47
|
+
const targetDir = path.join(process.cwd(), projectName);
|
|
48
|
+
|
|
49
|
+
console.log(chalk.cyan("\nš Creating your SPFx project...\n"));
|
|
50
|
+
|
|
51
|
+
const spinner = ora("Copying template...").start();
|
|
52
|
+
|
|
53
|
+
// š Copy template
|
|
54
|
+
fs.cpSync(templateDir, targetDir, { recursive: true });
|
|
55
|
+
|
|
56
|
+
spinner.text = "Customizing project...";
|
|
57
|
+
|
|
58
|
+
// ā Run setup script
|
|
59
|
+
execSync(`node setup.js "${projectName}"`, {
|
|
60
|
+
cwd: targetDir,
|
|
61
|
+
stdio: "ignore",
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
spinner.succeed(chalk.green("ā Project setup complete"));
|
|
65
|
+
|
|
66
|
+
// š detect Tailwind support
|
|
67
|
+
let hasTailwind = false;
|
|
68
|
+
try {
|
|
69
|
+
const pkg = require(path.join(targetDir, "package.json"));
|
|
70
|
+
hasTailwind = !!pkg.scripts?.["build:tailwind"];
|
|
71
|
+
} catch {}
|
|
72
|
+
|
|
73
|
+
// ā Ask install (unless flag used)
|
|
74
|
+
let install = true;
|
|
75
|
+
|
|
76
|
+
if (noInstallFlag) {
|
|
77
|
+
install = false;
|
|
78
|
+
} else {
|
|
79
|
+
const answer = await inquirer.prompt([
|
|
80
|
+
{
|
|
81
|
+
type: "confirm",
|
|
82
|
+
name: "install",
|
|
83
|
+
message: "Install dependencies now?",
|
|
84
|
+
default: true,
|
|
85
|
+
},
|
|
86
|
+
]);
|
|
87
|
+
install = answer.install;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// š¦ Install dependencies
|
|
91
|
+
if (install) {
|
|
92
|
+
const installSpinner = ora("Installing dependencies...").start();
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
execSync("npm install", {
|
|
96
|
+
cwd: targetDir,
|
|
97
|
+
stdio: "inherit",
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
installSpinner.succeed(chalk.green("ā Dependencies installed"));
|
|
101
|
+
} catch (err) {
|
|
102
|
+
installSpinner.fail(chalk.red("ā Installation failed"));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// š Success message
|
|
107
|
+
console.log("\n" + chalk.bold.green("š Project created successfully!\n"));
|
|
108
|
+
|
|
109
|
+
console.log(chalk.yellow("š Next steps:"));
|
|
110
|
+
console.log(chalk.white(` cd ${projectName}`));
|
|
111
|
+
|
|
112
|
+
if (!install) {
|
|
113
|
+
console.log(chalk.white(" npm install"));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
console.log("");
|
|
117
|
+
|
|
118
|
+
console.log(chalk.yellow("š Start development:"));
|
|
119
|
+
|
|
120
|
+
console.log(chalk.cyan(" # Terminal 1"));
|
|
121
|
+
console.log(chalk.white(" npm run start"));
|
|
122
|
+
|
|
123
|
+
if (hasTailwind) {
|
|
124
|
+
console.log("");
|
|
125
|
+
console.log(chalk.cyan(" # Terminal 2"));
|
|
126
|
+
console.log(chalk.white(" npm run build:tailwind"));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
console.log("\n" + chalk.gray("Happy coding š\n"));
|
|
130
|
+
} catch (err) {
|
|
131
|
+
console.log(chalk.red("\nā Something went wrong\n"));
|
|
132
|
+
console.error(err);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
run();
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-spfx-tailwind-app",
|
|
3
|
+
"engines": {
|
|
4
|
+
"node": ">=22"
|
|
5
|
+
},
|
|
6
|
+
"version": "1.0.10",
|
|
7
|
+
"main": "index.js",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"spfx",
|
|
13
|
+
"sharepoint",
|
|
14
|
+
"tailwind",
|
|
15
|
+
"spfx tailwind",
|
|
16
|
+
"create spfx app",
|
|
17
|
+
"spfx cli"
|
|
18
|
+
],
|
|
19
|
+
"files": [
|
|
20
|
+
"index.js",
|
|
21
|
+
"README.md",
|
|
22
|
+
"Template/**"
|
|
23
|
+
],
|
|
24
|
+
"author": "Deependra Singh",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"description": "CLI to scaffold SPFx projects with Tailwind CSS preconfigured",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/deependrasingh002/create-spfx-tailwind-app.git"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/deependrasingh002/create-spfx-tailwind-app.git",
|
|
32
|
+
"bin": {
|
|
33
|
+
"create-spfx-app": "./index.js"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"chalk": "^4.1.2",
|
|
37
|
+
"figlet": "^1.11.0",
|
|
38
|
+
"gradient-string": "^3.0.0",
|
|
39
|
+
"inquirer": "^8.2.7",
|
|
40
|
+
"ora": "^5.4.1"
|
|
41
|
+
}
|
|
42
|
+
}
|