diff --git a/package.json b/package.json index 9b643bb..66683ca 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "private": true, "scripts": { "build": "nuxt build", + "start": "node .output/server/index.mjs", + "prestart": "node -e \"process.exit(require('fs').existsSync('.output/server/index.mjs')?0:1)\" || yarn build", "dev": "nuxt dev", "generate": "nuxt generate", "preview": "nuxt preview", diff --git a/pages/templates/conflict-resolution-framework.vue b/pages/templates/conflict-resolution-framework.vue index 68ce276..00bc782 100644 --- a/pages/templates/conflict-resolution-framework.vue +++ b/pages/templates/conflict-resolution-framework.vue @@ -5,15 +5,16 @@
-
+ class="template-wrapper bg-white dark:bg-neutral-950 text-neutral-900 dark:text-neutral-100" + >
@@ -21,7 +22,8 @@

+ :data-org-name="formData.orgName || 'Organization'" + > CONFLICT RESOLUTION FRAMEWORK

@@ -38,7 +40,8 @@ size="xl" class="w-full" :error="validationErrors.orgName" - @input="debouncedAutoSave" /> + @input="debouncedAutoSave" + />
@@ -49,12 +52,11 @@ size="xl" class="w-full" :error="validationErrors.orgType" - @change="autoSave" /> + @change="autoSave" + /> - + + @change="autoSave" + />
@@ -79,38 +82,44 @@ label="Include this section" :ui="{ label: 'text-xs text-neutral-700 dark:text-neutral-300', - }" /> + }" + />
+ class="form-group-large" + >
+ class="checkbox-item" + > + @change="autoSave" + />
+ class="form-group-large" + > + @input="debouncedAutoSave" + />
@@ -126,12 +135,14 @@
+ class="checkbox-item" + > + @change="autoSave" + />
@@ -144,14 +155,14 @@

4. Primary Resolution Approach

- + + class="mt-2" + />
{{ validationErrors.approach }}
@@ -163,7 +174,8 @@ id="anonymous-reporting" label="Allow anonymous reporting" help="Members can report issues without revealing their identity" - @change="autoSave" /> + @change="autoSave" + />
@@ -175,36 +187,36 @@
+ class="form-group-large" + >
+ class="checkbox-item" + > + @change="autoSave" + />
-
+
{{ validationErrors.reportReceivers }}
- + + @change="autoSave" + /> @@ -213,7 +225,8 @@ id="support-people" label="Allow support people in mediation sessions" help="Parties can bring a trusted person for emotional support" - @change="autoSave" /> + @change="autoSave" + />
@@ -224,9 +237,7 @@
- + + @change="autoSave" + /> - + + @change="autoSave" + />
+ class="form-group-large" + >
+ class="checkbox-item" + > + @change="autoSave" + />
-
+
{{ validationErrors.processSteps }}
@@ -277,8 +289,7 @@
-
+

7. Documentation & Privacy

+ }" + />
@@ -299,31 +311,30 @@ placeholder="Select documentation level..." size="xl" class="w-full" - @change="autoSave" /> + @change="autoSave" + /> - + + @change="autoSave" + /> - + + @change="autoSave" + />
@@ -335,42 +346,44 @@
+ class="form-group-large" + >
+ class="checkbox-item" + > + @change="autoSave" + />
-
+
{{ validationErrors.availableActions }}
+ class="form-group-large border-t border-neutral-200 dark:border-neutral-800 pt-4" + > + @change="autoSave" + />
-
+

9. Special Circumstances

+ }" + />
@@ -388,12 +402,14 @@
+ class="checkbox-item" + > + @change="autoSave" + />
@@ -404,22 +420,19 @@

10. Implementation Details

- + + @input="debouncedAutoSave" + />
- + + @change="autoSave" + /> + class="form-group-large" + > + @change="autoSave" + />
@@ -451,7 +467,8 @@ type="date" size="xl" class="w-full mb-0" - @change="autoSave" /> + @change="autoSave" + />
@@ -460,7 +477,8 @@ type="date" size="xl" class="w-full mb-0" - @change="autoSave" /> + @change="autoSave" + />
@@ -469,8 +487,7 @@
-
+

11. Reflection Process

+ }" + />
- + + @change="autoSave" + /> - + + @input="debouncedAutoSave" + />
-
+

12. Direct Resolution Guidelines

+ }" + />
+ class="form-group-large" + >
+ class="checkbox-item" + > + @change="autoSave" + />
+ class="form-group-large border-t border-neutral-200 dark:border-neutral-800 pt-4" + > + @change="autoSave" + /> + class="form-group-large border-t border-neutral-200 dark:border-neutral-800 pt-4" + > + @change="autoSave" + />
-

- 13. Responsible Contact People Structure -

+

13. Responsible Contact People Structure

- + + @change="autoSave" + /> + class="form-group-large" + > + @input="debouncedAutoSave" + /> + class="form-group-large" + > + @change="autoSave" + />
@@ -615,19 +639,19 @@

14. Formal Complaint Requirements

- +
+ class="checkbox-item" + > + @change="autoSave" + />
@@ -635,26 +659,30 @@
+ class="form-group-large" + > + @change="autoSave" + /> + class="form-group-large" + > + @change="autoSave" + />
@@ -664,7 +692,8 @@ id="require-external-advice" label="Require external legal advice for complex complaints" help="Seek external expertise for multi-party or staff/director complaints" - @change="autoSave" /> + @change="autoSave" + />
@@ -680,31 +709,36 @@ id="minutes-of-settlement" label="Require 'Minutes of Settlement' for resolved complaints" help="Agreements must be documented in writing and signed by both parties" - @change="autoSave" /> + @change="autoSave" + />
+ class="form-group-large" + > + @change="autoSave" + /> + class="form-group-large" + > + @change="autoSave" + />
@@ -712,8 +746,7 @@
-
+

16. External Resources & Redress

+ }" + />
@@ -733,31 +767,30 @@ id="include-human-rights" label="Include Human Rights Commission information" help="Reference external discrimination complaint options" - @change="autoSave" /> + @change="autoSave" + /> - + + @input="debouncedAutoSave" + /> - + + @input="debouncedAutoSave" + />
@@ -765,20 +798,23 @@
+ class="border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-950 p-5 rounded-lg shadow-sm" + >

📄 Policy Document Preview

+ title="Hide preview" + > ✕
+ class="policy-preview prose prose-neutral dark:prose-invert max-w-none px-6 py-5 bg-neutral-50 dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-900 rounded-md max-h-[600px] overflow-y-auto text-left" + v-html="markdownToHtml(generatePolicyDocument())" + >
@@ -787,10 +823,10 @@
-
@@ -870,13 +906,7 @@ const responseTimeOptions = [ "Within 2 weeks", ]; -const resolutionTimeOptions = [ - "1 week", - "2 weeks", - "30 days", - "60 days", - "90 days", -]; +const resolutionTimeOptions = ["1 week", "2 weeks", "30 days", "60 days", "90 days"]; const docLevelOptions = [ "Minimal - outcomes only", @@ -937,13 +967,7 @@ const acknowledgmentTimeOptions = [ "Within 2 weeks", ]; -const reviewTimeOptions = [ - "2 weeks", - "1 month", - "6 weeks", - "2 months", - "3 months", -]; +const reviewTimeOptions = ["2 weeks", "1 month", "6 weeks", "2 months", "3 months"]; const sectionsEnabled = ref({ values: true, @@ -1117,18 +1141,14 @@ const validateForm = () => { } // Required checkbox groups (must have at least one checked) - const checkedConflictTypes = conflictTypes.value.filter( - (item) => item.checked - ); + const checkedConflictTypes = conflictTypes.value.filter((item) => item.checked); if (checkedConflictTypes.length === 0) { errors.conflictTypes = "Please select at least one type of conflict"; } // Note: Guiding Principles & Values section is optional - no validation needed - const checkedReportReceivers = reportReceivers.value.filter( - (item) => item.checked - ); + const checkedReportReceivers = reportReceivers.value.filter((item) => item.checked); if (checkedReportReceivers.length === 0) { errors.reportReceivers = "Please select at least one report receiver"; } @@ -1138,9 +1158,7 @@ const validateForm = () => { errors.processSteps = "Please select at least one process step"; } - const checkedAvailableActions = availableActions.value.filter( - (item) => item.checked - ); + const checkedAvailableActions = availableActions.value.filter((item) => item.checked); if (checkedAvailableActions.length === 0) { errors.availableActions = "Please select at least one available action"; } @@ -1188,9 +1206,8 @@ const completionPercentage = computed(() => { ...specialCircumstances.value, ]; - const filledInputs = allInputs.filter( - (val) => val && val.toString().trim() !== "" - ).length; + const filledInputs = allInputs.filter((val) => val && val.toString().trim() !== "") + .length; const checkedBoxes = checkboxInputs.filter((item) => item.checked).length; const totalFields = allInputs.length + checkboxInputs.length; @@ -1214,12 +1231,10 @@ const loadSavedData = () => { // Load checkbox arrays if (parsedData.coreValues) coreValues.value = parsedData.coreValues; - if (parsedData.conflictTypes) - conflictTypes.value = parsedData.conflictTypes; + if (parsedData.conflictTypes) conflictTypes.value = parsedData.conflictTypes; if (parsedData.reportReceivers) reportReceivers.value = parsedData.reportReceivers; - if (parsedData.processSteps) - processSteps.value = parsedData.processSteps; + if (parsedData.processSteps) processSteps.value = parsedData.processSteps; if (parsedData.availableActions) availableActions.value = parsedData.availableActions; if (parsedData.specialCircumstances) @@ -1369,12 +1384,11 @@ const exportData = computed(() => ({ finalDecision: formData.value.finalDecision, learning: formData.value.learning, emergencyProcedures: formData.value.emergencyProcedures, - annualReview: formData.value.annualReview + annualReview: formData.value.annualReview, }, exportedAt: new Date().toISOString(), - section: "conflict-resolution-framework" + section: "conflict-resolution-framework", })); -